我想執行一個SELECT查詢,但我沒有選擇多少列。如何從php中的select查詢中獲取列名?
像:
select name, family from persons;
我怎麼能知道選擇哪個列?
「我目前正在爲用戶執行查詢設計一個網站,所以當用戶執行這個查詢時,我不會知道選擇了哪一列 但是當我想顯示結果並畫一張表用戶我應該知道選擇了哪些列。「
我想執行一個SELECT查詢,但我沒有選擇多少列。如何從php中的select查詢中獲取列名?
像:
select name, family from persons;
我怎麼能知道選擇哪個列?
「我目前正在爲用戶執行查詢設計一個網站,所以當用戶執行這個查詢時,我不會知道選擇了哪一列 但是當我想顯示結果並畫一張表用戶我應該知道選擇了哪些列。「
使用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);
}
}
?>
使用DESC table
或
例
SELECT GROUP_CONCAT(column_name) FROM information_schema.columns WHERE table_name='your_table';
輸出
column1,column2,column3
首先,要明白你想要檢索什麼樣的數據。然後查看數據庫模式以找出數據庫包含哪些表以及這些表包含哪些列。
下面的查詢返回設置數據庫中的每個表中的每一列的結果:
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
來執行這些查詢。
如果我理解你的要求,你可能想使用MySQLIi和在fetch_fields方法對結果集:
http://us3.php.net/manual/en/mysqli-result.fetch-fields.php
請參閱網頁上的例子。
對於未知的查詢字段,您可以使用此代碼。
它爲您提供每行字段名稱=>數據。您甚至可以將密鑰更改爲''
,以便按照數據庫中列的順序獲取按num排序的數組列。
$data = array();
while($row = mysql_fetch_assoc($query))
{
foreach($row as $key => $value) {
$data[$row['id']][$key] = $value;
}
}
print_r($data);
如果您想在任何情況下獲取任何查詢的列名,那就不那麼容易了。
如果至少有一行被返回,您可以直接從該行獲取列。
但是,如果在沒有結果顯示錶格/導出爲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'];
}
}
SELECT name_of_yourcolumn FROM表或.. SELECT *(如一切)FROM表,或者,如果你真的想要的列名,做SHOW COLUMNS FROM表 – 2012-07-07 22:09:51
@AndréCatita它看起來像OP知道SQL語法。我想他是問如何發現數據庫模式。 – 2012-07-07 22:18:20
@Farshad你最近的編輯讓我困惑。您是否正在設計一個可接受來自用戶的任意SQL查詢的網站,例如[sqlfiddle.com](http://sqlfiddle.com)?如果是這樣,用戶的查詢已經包含您需要的所有信息。 – 2012-07-09 01:43:00