[英]More than one mysql_fetch_array()
CODE1:
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()
?
&&
的運算符優先級高於=
。 因此,在兩個部分周圍加上括號,然后嘗試以下操作:
while(($row1 = mysql_fetch_array($result2)) && ($row2 = mysql_fetch_array($result4)))
那就像在做
$true = false;
while(true && $true)
{
$true = false;
}
如果它們中的任何一個becmome為false / 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
允許其中一個被取消,另一個可以繼續,但這確實不是一個好的編程標准!
mysql_fetch_array()逐行處理數據庫結果。 如果您在一個循環中執行的操作比mysql_fetch_array多,則意味着您只能走N行。
其中N是“ $結果”選擇的最小行數。
減少代碼長度的唯一正確方法是制作函數 。
例如,一個函數將一個查詢及其參數作為參數並返回一個數組。
像這個
<?
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;
}
但是看來您不需要數組和while運算符。
但是就像愚蠢的代碼一樣
$row1 = mysql_fetch_array($result2)
$row2 = mysql_fetch_array($result4)
$details = array($row1[0],$row2[0]);
因此我們可以從中學到,了解您在做什么總是有幫助的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.