2011-02-25 69 views
1

我在MySQL數據庫中有一個名爲'location'的字段 - 它只提供North,South,East,West。從mysql_fetch_array查詢創建表格

我已經使用這個代碼只得到4分的結果是不同的:

$query_form = "SELECT DISTINCT location FROM hotel ORDER BY location ASC"; 
$result_form = mysqli_query($dbc, $query_form) or die('die query error'); 
$row_form = mysql_fetch_array($result_form, MYSQLI_NUM); 

我想用四個結果從該查詢填充表這樣的:

<option value='1'>North</option> 
<option value='2'>South</option> 
<option value='3'>East</option> 
<option value='4'>West</option> 

我已經使用這個:

foreach ($row_form['location'] as $k => $v) { 
    echo '<option value="' . $k . '">' . $v . '</option>\n'; 
    } 

但我擔心,我的做法是行不通的 - 遺憾的,我是noob和無法解決什麼是錯的!

由於

+0

使用'mysql_fetch_assoc();'或改變'mysql_fetch_array($ result_form,MYSQL_ASSOC);' – kjy112

回答

2

mysql_fetch_array只會(引用本手冊中,重點煤礦)

結果列作爲 關聯數組,數字數組,或 兩者

因此,您必須多次調用此函數 - 執行盟友,每行一次(so,here,4 times)


這通常是通過一個循環來完成的,當你得到結果時循環。
在你的情況,你可能想使用的東西,看起來像這樣:

$lineCounter = 1; 
while ($row = mysql_fetch_array($result_form, MYSQL_ASSOC)) { 
    // Use your row, here. 
    // For instance : $row['location'] 
    // And you can use the $lineCounter variable, to keep track of the current line number. 
    $lineCounter++; 
} 

注:

  • 我以前MYSQL_ASSOC,得到一個關聯數組的每一行:我覺得這樣工作更容易。
  • while循環的主體中,可以使用按列名索引的$row關聯數組。


作爲旁註,在一些HTML代碼注入數據時(例如字符串),則應該正確轉義輸出,避免HTML注射。

有關解決方案,請參閱htmlspecialchars函數。

0

MYSQLI_NUM實際上會返回帶有數字索引的字段。根據您的要求,我相信,它不會真的有幫助<option value="x">..

[檢查此鏈接有關MYSQLI_NUM實際上做了什麼:MYSQLI_NUM是什麼意思和做什麼?

現在,在你的代碼,你需要修改如下:

$i=1; 
while ($row_form=mysql_fetch_array($result_form, MYSQLI_NUM)) { 
    echo '<option value="' . $i . '">' . $row_form['location'] . '</option>\n'; 
    $i++; 
} 

編輯:由於這裏的另一種回答指出,你真的需要有一個循環構建從出檢索每一行數據庫。一個mysql_fetch_array(..)將只給你一行。你需要循環迭代,直到函數返回一個有效的行。

檢查功能如何工作的:http://php.net/manual/en/function.mysql-fetch-array.php