2010-08-25 36 views
2

CODE1:多於一個mysql_fetch_array()

while($row1 = mysql_fetch_array($result2) && $row2 = mysql_fetch_array($result4)) 
{ 
$details[0] = $row1[0]; 
$details[1] = $row2[0]; 
var_dump($details[0]); 
var_dump($details[1]); 
} 

OUTPUT1:

NULL string(1) "5" 

CODE2:

while($row1 = mysql_fetch_array($result2)) 
{ 
$details[0] = $row1[0]; 
var_dump($details[0]); 
} 
while($row2 = mysql_fetch_array($result4)) 
{ 
$details[1] = $row2[0]; 
var_dump($details[1]); 
} 

OUTPUT2:

string(6) "728548" string(1) "5" 

**OUTPUT2**是期望的結果。我已經檢查了我在這裏沒有提到的代碼的其餘部分,沒有什麼是錯的。使用**CODE1**而不是**CODE2**會給出錯誤結果。我試過**CODE1**只是爲了減少我的代碼長度,但它不工作。爲什麼我們不能像**CODE1**那樣使用多於一個mysql_fetch_array()

+2

下一次幫助,請考慮使用代碼格式化 – Youssef 2010-08-25 10:29:50

+0

謝謝你糾正我的錯誤標籤。 – nullpointerexception 2010-08-25 10:36:22

回答

3

operator precedence&&高於=。所以,把括號中的兩個部分並嘗試這樣的:像做

$true = false; 

while(true && $true) 
{ 
    $true = false; 
} 

while(($row1 = mysql_fetch_array($result2)) && ($row2 = mysql_fetch_array($result4))) 
2

那如果他們中的任何人becmome假/ null的另將藏漢失敗,因此除非有量是相同的你會遇到問題的行!

什麼你最好在這樣的情況做的是

while(($result_2 = mysql_fetch_array($result2)) || ($result_4 = mysql_fetch_array($result4))) 
{ 
    if($result_2) 
    { 
     //Do something 
    } 
    if($result_4) 
    { 
     //Do something 
    } 
} 

使用||/or允許一個被取消了,而另一個繼續,但是這真的不是很好的編程標準!

+0

感謝您的快速響應,雖然它不是我正在尋找的正確答案。但是,你的觀點「除非存在完全相同數量的行,否則會遇到問題!」值得注意。 – nullpointerexception 2010-08-25 10:53:28

0

mysql_fetch_array()逐行處理數據庫結果。如果你在一個循環中執行多於mysql_fetch_array,這意味着你只能走N行。

其中N是您的'$結果'選擇的最小行數。

+0

請詳細說明您的答案有點混亂。感謝您的答覆。 – nullpointerexception 2010-08-25 10:59:20

+0

表示您在$ result1中有10行,在result2中有15行。 while while($ row = mysql_fetch_array($ result1)&& $ row = mysql_fetch_array($ result2))只會處理2個結果的前10行。 – Youssef 2010-08-25 12:11:53

0

只有減少代碼長度的正確方法是製作一個函數
例如一個函數,它將接受查詢並將其參數作爲參數並返回一個數組。
贊一個

<? 
function dbgetarr(){ 
    $a = array(); 
    $query = $args[0]; 
    unset ($args[0]); 
    foreach ($args as $key => $val) { 
    $args[$key] = "'".mysql_real_escape_string($val)."'"; 
    } 
    $query = vsprintf($query, $args); 

    $res = mysql_query($query); 
    if (!$res) { 
    trigger_error("dbget: ".mysql_error()." in ".$query); 
    } else { 
    while($row = mysql_fetch_assoc($res)) $a[]=$row; 
    } 
    return $a; 
} 

但似乎你不需要陣列也同時運營商在你的情況。
但正如愚蠢代碼

$row1 = mysql_fetch_array($result2) 
$row2 = mysql_fetch_array($result4) 
$details = array($row1[0],$row2[0]); 

,所以我們可以從這個是學習,瞭解你在做什麼總是