我想执行SELECT查询,但我没有选择多少列。
像:
select name, family from persons;
我如何知道要选择哪些列?
“我目前正在为用户设计执行查询的网站。 因此,当用户执行此查询时,我将不知道选择了哪些列。 但是当我想显示结果并为用户绘制一个表时,我应该知道选择了哪些列。“
答案 0 :(得分:1)
首先,准确了解要检索的数据。然后查看数据库模式以找出数据库包含哪些表以及表包含哪些列。
以下查询返回数据库中每个表的每一列的结果集:
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
执行这些查询。
答案 1 :(得分:1)
如果我理解你的要求,你可能想在结果集上使用MySQLIi和fetch_fields方法:
http://us3.php.net/manual/en/mysqli-result.fetch-fields.php
请参阅该页面上的示例。
答案 2 :(得分:1)
对于未知查询字段,您只需使用此代码即可。
它为您提供每个行字段name => data。您甚至可以将密钥更改为''
,以便按照数据库中列的顺序,按num获取有序数组列。
$data = array();
while($row = mysql_fetch_assoc($query))
{
foreach($row as $key => $value) {
$data[$row['id']][$key] = $value;
}
}
print_r($data);
答案 3 :(得分:1)
如果您想在任何情况下获取任何查询的列名,那就不那么容易了。
如果返回至少一行,您可以直接从此行获取列。
但是当您想要在没有结果显示表/导出到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'];
}
}
答案 4 :(得分:0)
使用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);
}
}
?>
答案 5 :(得分:0)
使用DESC table
或
示例强>
SELECT GROUP_CONCAT(column_name) FROM information_schema.columns WHERE table_name='your_table';
<强>输出强>
column1,column2,column3