2011-06-10 128 views
0

我不確定是否對此代碼使用'while'或'for each'。對mysql查詢的每個單獨結果使用while語句

我有一個mysql查詢,將帶回多一個結果。

我那麼,對於每個結果,想要做某一件事,如果$row[number]爲空或不

我有這樣的:

$sql = "SELECT * FROM $tbl_name WHERE username=\"$myusername\""; 
$result=mysql_query($sql); 
$numResults = mysql_num_rows($result); 
if ($numResults = 0) { 
header ("Location: /sms_error.php?error=no_adders"); 
} 
while($row = mysql_fetch_array($result)) { 
$number1=$row["number"]; 
if (!empty($number1)) { 


} 

if (empty($number1)) { 


} 

這是未來與完全空白的$數字1(甚至雖然有關於數據庫的數據)。

一切正常,$ myusername和mysql查詢不返回空。

所以應該是mysql-fetch-assoc或者-array,它應該是while還是for each?

感謝, 尼爾

回答

1

首先,你必須在這行代碼的問題:

if ($numResults = 0) { 
    header ("Location: /sms_error.php?error=no_adders"); 
} 

這始終是假的 - 你不比較,要指定0到$ numResults。將其更改爲==,然後查看是否有任何行隨您的查詢一起提出。

while($row = mysql_fetch_array($result)) { 
$number1=$row["number"]; 
//... 
} 

這是一個有效的語法,正如我所見。嘗試撥打var_dump($row)查看$row陣列的內容。

編輯:

哦,是的 - 而不是這樣的:

$result=mysql_query($sql); 

做到這一點:

$result=mysql_query($sql) or die(mysql_error()); 

一個建議 - 你應該始終調用exit();header("Location: ...");之後,以防止執行代碼在你的腳本中重定向行之後,因爲標題只有請求用戶瀏覽器重定向噸。

+0

:) ==我不醒,歡呼聲,我的分貝有問題,它不是代碼。無論如何,謝謝 – Niall 2011-06-10 14:43:37

+0

沒問題。 :) – 2011-06-10 14:46:07

0

一切達那是正確的,$名爲myUsername和MySQL查詢沒有返回空

我希望你已經下調代碼以證明它是什麼打算做;即真實代碼包含合理的評論和錯誤處理。如果沒有,那麼你怎麼知道你是否從服務器獲取任何數據?此外,你有一個任務,而不是檢查的行數的結果集時的比較:

if ($numResults = 0) { 

您需要根據查詢返回獲取數據行的可用性/數圈從結果集 - 你不能使用foreach()。

至於是否應該使用_fetch_array()或_fetch_assoc(),答案應該很明顯。