2012-11-28 35 views
0

所以,這是我遇到的一件奇怪的事情,也許是因爲深夜或我只是缺少一些基本的東西。我必須將查詢發送到數組,而不是循環查詢,因爲其他API調用可以發送數組而不是來自數據庫。該查詢返回多個項目,因爲它也是。到代碼:對數組的MySQLi查詢 - 在數組上循環返回空結果

$result = $db->query("SELECT ID FROM tblTemp WHERE FOREIGN_KEY='2'"); 
$tmp = $result->fetch_array(MYSQLI_BOTH);   

for($i = count($tmp); $i > 0; --$i) { 
echo '<option value="'.$tmp[$i-1].'">Item '.$i.'</option>'; 
} 

所以,我只是試圖讓數組項成HTML選擇。這適用於傳遞$ tmp數組;但是,使用查詢時發生的情況是,只有第一條記錄被填充到select中。添加了正確數量的項目,但缺少值。 即

<option value="">Item 2</option> 
<option value="7">Item 1</option> 

編輯:PHP確實拋出的錯誤:未定義抵消:1

回答

1

你只取出由查詢一個記錄,這就是爲什麼你有一個值,並得到一個未定義的偏移。 在以下示例中,while循環用於從查詢中獲取所有結果。

$result = $db->query("SELECT ID FROM tblTemp WHERE FOREIGN_KEY='2'"); 
$html = ""; 
$i = 1; 
while($tmp = $result->fetch_array(MYSQLI_BOTH)) { 
    $html = '<option value="'.$tmp['ID'].'">Item '.$i.'</option>'.html; 
    $i++; 
} 
echo $html; 
+0

好吧,我明白了;但是,代碼依然顯示了$ tmp數組中的2個項目。這是可見的,因爲在for循環中添加了2個元素。我無法更改for循環,因爲它可能是一個查詢,或者它可能是一個傳遞的數組,所以默認情況下所有內容都將轉到數組。我應該只是通過這個查詢並循環查詢並將這些項目添加到$ tmp數組中?我只是認爲有一個更清潔的方法。 – Munsterlander

+0

@ user1666691您在數組中獲得兩個項目,因爲您在'fetch_array'中傳遞'MYSQLI_BOTH',其中一個ID爲'0',另一個ID爲'ID',但其值相同。如果你需要一個數組,就像你說的那樣,只是在查詢結果的while循環中建立一個數組。 – Musa

+0

Right-o。在弄亂之後,我想這是我最終必須做的事情。 – Munsterlander

0

其實,

 

    for($i = count($tmp); $i > 0; --$i) { 
    echo 'Item '.$i.''; 
    } 
 

應該工作,如果$ TMP返回各適量。確保$ tmp返回了正確的數據。

希望這會有所幫助。

+0

當我做到了,通過數組不再起作用。他們顯示一個短。 – Munsterlander

+0

你確定** $ tmp **從數據庫中返回了正確的數據嗎?這應該工作。 –

+0

返回了正確的數據,但顯然fetch_array不會將所有結果都存入一個您可以參考的數組中。它只是獲得了結果集中記錄的位置,並且循環了指針。上面的答案通過循環並將值推送到$ tmp數組來解決問題。 – Munsterlander