簡體   English   中英

多個mysql_fetch_array()

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM