2012-07-07 117 views
0

我想執行一個SELECT查詢,但我沒有選擇多少列。如何從php中的select查詢中獲取列名?

像:

select name, family from persons; 

我怎麼能知道選擇哪個列?

「我目前正在爲用戶執行查詢設計一個網站,所以當用戶執行這個查詢時,我不會知道選擇了哪一列 但是當我想顯示結果並畫一張表用戶我應該知道選擇了哪些列。「

+0

SELECT name_of_yourcolumn FROM表或.. SELECT *(如一切)FROM表,或者,如果你真的想要的列名,做SHOW COLUMNS FROM表 – 2012-07-07 22:09:51

+0

@AndréCatita它看起來像OP知道SQL語法。我想他是問如何發現數據庫模式。 – 2012-07-07 22:18:20

+0

@Farshad你最近的編輯讓我困惑。您是否正在設計一個可接受來自用戶的任意SQL查詢的網站,例如[sqlfiddle.com](http://sqlfiddle.com)?如果是這樣,用戶的查詢已經包含您需要的所有信息。 – 2012-07-09 01:43:00

回答

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); 
    } 
} 
?> 
0

使用DESC table

SELECT GROUP_CONCAT(column_name) FROM information_schema.columns WHERE table_name='your_table'; 

輸出

column1,column2,column3 
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

對於未知的查詢字段,您可以使用此代碼。

它爲您提供每行字段名稱=>數據。您甚至可以將密鑰更改爲'',以便按照數據庫中列的順序獲取按num排序的數組列。

$data = array(); 
while($row = mysql_fetch_assoc($query)) 
{ 
    foreach($row as $key => $value) { 
     $data[$row['id']][$key] = $value; 
    } 
} 
print_r($data); 
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']; 
    } 
} 
相關問題