是否有一种方法可以在MySQL中使用PHP获取表的列名?


当前回答

您可以使用以下简单的命令获取整个表结构。

DESC TableName

或者您可以使用以下查询。

SHOW COLUMNS FROM TableName

其他回答

调查:

mysql_query('DESCRIBE '.$table);

如果使用assoc加载结果,简单的方法是这样做:

$sql = "SELECT p.* FROM (SELECT 1) as dummy LEFT JOIN `product_table` p on null";
$q = $this->db->query($sql);
$column_names = array_keys($q->row);

这个你用这个查询加载一个结果,你得到一个数组,表的列名为键,值为空。 如。

Array(
'product_id' => null,
'sku' => null,
'price' => null,
...
)

之后,您可以使用PHP函数array_keys($result)轻松获取表的列名。

这对我很有效。

$sql = "desc MyTableName";
$result = @mysql_query($sql);
while($row = @mysql_fetch_array($result)){
    echo $row[0]."<br>";
}

我做了一个PDO函数,它返回一个简单数组中的所有列名。

public function getColumnNames($table){
    $sql = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = :table";
    try {
        $core = Core::getInstance();
        $stmt = $core->dbh->prepare($sql);
        $stmt->bindValue(':table', $table, PDO::PARAM_STR);
        $stmt->execute();
        $output = array();
        while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
            $output[] = $row['COLUMN_NAME'];                
        }
        return $output; 
    }

    catch(PDOException $pe) {
        trigger_error('Could not connect to MySQL database. ' . $pe->getMessage() , E_USER_ERROR);
    }
}

输出将是一个数组:

Array (
[0] => id
[1] => name
[2] => email
[3] => shoe_size
[4] => likes
... )

对不起死灵,但我喜欢我的功能;)

附注:我没有包括类核心,但你可以使用自己的类。科学博士

$col = $db->query("SHOW COLUMNS FROM category");

while ($fildss = $col->fetch_array())
{             
    $filds[] = '"{'.$fildss['Field'].'}"';
    $values[] = '$rows->'.$fildss['Field'].'';
}

if($type == 'value')
{
    return $values = implode(',', $values);
}
else {
     return $filds = implode(',', $filds);
}