如何在php中从选择查询中得到列名?

bsxbgnwa  于 2023-01-08  发布在  PHP
关注(0)|答案(7)|浏览(94)

我想执行SELECT查询,但不知道要选择多少列。
例如:

select name, family from persons;

如何知道要选择哪些列?
"我目前正在为用户执行查询设计网站。因此,当用户执行此查询时,我不知道选择了哪些列。但当我想显示结果并为用户绘制表时,我应该知道选择了哪些列。"

5q4ezhmt

5q4ezhmt1#

对于未知的查询字段,可以只使用此代码。
它给你每一行字段name=〉data,你甚至可以把键改为'',以得到按num排序的数组列,列的顺序遵循数据库中的列的顺序。

$data = array();
while($row = mysql_fetch_assoc($query))
{
    foreach($row as $key => $value) {
        $data[$row['id']][$key] = $value;
    }
}
print_r($data);
ruyhziif

ruyhziif2#

首先,准确地了解要检索的数据。然后查看数据库架构,找出数据库包含哪些表以及表包含哪些列。
以下查询返回数据库中每个表的每列的结果集:

SELECT table_name, column_name
FROM INFORMATION_SCHEMA.COLUMNS;

在这个sqlfiddle中,它返回以下结果集(为简洁起见,这里将其截断):

TABLE_NAME  COLUMN_NAME
-----------------------
CHARACTER_SETS  CHARACTER_SET_NAME
CHARACTER_SETS  DEFAULT_COLLATE_NAME
CHARACTER_SETS  DESCRIPTION
CHARACTER_SETS  MAXLEN
COLLATIONS  COLLATION_NAME
COLLATIONS  CHARACTER_SET_NAME
COLLATIONS  ID
COLLATIONS  IS_DEFAULT
COLLATIONS  IS_COMPILED
COLLATIONS  SORTLEN

现在我知道可以从表CHARACTER_SETS中选择列CHARACTER_SET_NAME,如下所示:

SELECT CHARACTER_SET_NAME
FROM CHARACTER_SETS;

使用mysqli::query执行这些查询。

z9ju0rcb

z9ju0rcb3#

如果我理解了您的问题,您可能希望对结果集使用MySQLIi和fetch_fields方法:
http://us3.php.net/manual/en/mysqli-result.fetch-fields.php
参见该页上的示例。

pvabu6sv

pvabu6sv4#

如果您想在所有情况下都获得任何查询的列名,这并不容易。
如果至少返回一行,则可以直接从该行获取列。
但是当你想在没有结果显示表格/导出到CSV的情况下获取列名时,你需要使用不是100%可靠的PDO函数。

// sample query - it might contain joins etc.
$query = 'select person.name, person.family, user.id from persons LEFT JOIN users ON persons.id = user.person_id';

$statement = $pdo->query($query);
$data = $statement->fetchAll(PDO::FETCH_CLASS);
if (isset($data[0])) {
  // there is at least one row - we can grab columns from it
  $columns = array_keys((array)$data[0]);
}
else {
   // there are no results - no need to use PDO functions
   $nr = $statement->columnCount();
   for ($i = 0; $i < $nr; ++$i) {
      $columns[] = $statement->getColumnMeta($i)['name'];
   }
}
tktrz96b

tktrz96b5#

使用mysql_query()并执行以下查询:

SHOW COLUMNS FROM table

示例:

<?php
 $result = mysql_query("SHOW COLUMNS FROM sometable");
 if (!$result) {
  echo 'Could not run query: ' . mysql_error();
  exit;
 }
 if (mysql_num_rows($result) > 0) {
  while ($row = mysql_fetch_assoc($result)) {
    print_r($row);
  }
 }
 ?>
92dk7w1h

92dk7w1h6#

使用DESC table

    • 示例**
SELECT GROUP_CONCAT(column_name) FROM information_schema.columns WHERE table_name='your_table';
    • 输出**
column1,column2,column3
t30tvxxf

t30tvxxf7#

使用fetch_fields

$sql = "SELECT * FROM AT_EMPLOYEES;";
$result = mysqli_query($conn, $sql);
$finfo = $result->fetch_fields();

        foreach ($finfo as $val) {
            echo $val->name ."<br>";
        }

相关问题