2012-12-22 105 views
0

我想創建一個簡單的選擇下拉列表,以填充到我的MYSQL數據庫中的一個表中。 這裏是我的代碼:無法從MySQL數據庫中獲取下拉列表

$q = 'SELECT * FROM Shipmethods'; 
$result = mysqli_query($connection, $q); 

echo '<select name="shipmethod">'; 

while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)); 
{ 
    echo '<option value="' . $row['shipmethodid'] . '">' . $row['shipmethoddesc'] . '</option>'; 
} 

echo '</select>'; 

mysqli_free_result($result); // free up the results 

}

沒有連接錯誤,在表名或列名沒有錯別字。 HTML輸出顯示選擇選項存在,但它是空的。我想爲此使用mysqli。

在這個問題上似乎有無數的話題,但據我所知,我的代碼匹配那些已經回答的問題的正確答案。

在此先感謝。從該行

+0

你有什麼試過?你檢查過查詢是否返回任何內容?我還建議你使用準備好的語句,因爲你已經使用了MySQLi。但是你應該在控制檯或者PHPMyAdmin中嘗試你的查詢,或者你可以做任何事情。 MySQL可能會失敗,但沒有內置的檢查,你永遠不會知道它在瀏覽器中......只是沒有結果。也許你可以用'print print_r($ row,true);'發佈$ row的內容。 –

+0

在while循環內添加'print_r($ row);'查看返回結果 – 2012-12-22 04:00:18

+1

Swapnesh釘住了它。但是,您的代碼也遭受「查詢和遺忘」弱點的影響。您查詢並將結果存儲在$ result中,但實際上並不檢查$ result。你應該有if($ result){//現在嘗試並獲取} else {printf(「Error:%s \ n」,mysqli_error($ connection)); }當然,正如Ian指出的那樣,查詢也可以返回一個空的結果集。 – gview

回答

5

刪除;,其餘的代碼似乎沒什麼問題,讓我知道,如果它工作或不 -

while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)); 

while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) 
+0

這不可能是除轉錄錯誤以外的任何其他內容。 PHP會在第x行的blah.php中拋出'Parse error:syntax error,unexpected'}'。 –

+0

@IanAtkin我們只能提供一個指向解決方案的指針..因爲我們不是頭讀者......如果他壓制所有類型的警告/通知等等,那麼它怎麼樣?即使它不會反映任何錯誤:) – swapnesh

+0

是啊,我認爲。也許你是對的。 –

0

首先,基於證據,我們除了空的結果集外,最可能的問題是swapnesh發現的問題,這顯然是一個邏輯錯誤。我正在提供這個插圖,它模擬了這個問題,以清楚地說明,在這裏意外完成的事情不是語法錯誤。本質上錯位的分號導致僅在while循環耗盡後才輸入以下塊。

考慮這個例子:

<?php 

$r = array(1,2,3,4); 

function fetchit(&$r) { 
    return array_pop($r); 
} 


while ($val = fetchit($r)) 
{ 
    echo $val; 
} 

這將是預期的用途。現在如果腳本具有這個代碼會發生什麼?

<?php 

$r = array(1,2,3,4); 

function fetchit(&$r) { 
    return array_pop($r); 
} 


while ($val = fetchit($r)); 
{ 
    echo $val; 
} 

嘗試這些,你會看到兩個腳本運行沒有錯誤。雖然不必要,但php並不關心你是否在腳本的某個地方隨機包含了一個未被佔用的塊,並且它也不關心if,while,for等後面跟着一個塊。這其實常見的做法爲人們縮短了代碼:

if (//somecondition) 
    statement; 

很多人不贊成這種做法,但它是合法的,並程序員使用它所有的時間。

+0

你說得對 - 他們沒有錯誤地運行並且通過語法跳棋,但它肯定確實讓我的早晨變得糟糕:)感謝進一步的解釋!實際上,在我在這裏發佈的代碼中,我省略了數據庫連接信息和錯誤檢查,試圖更加簡潔 - 下次我將確保添加它。 – Coleen

相關問題