多个mysql_fetch_array()

时间:2010-08-25 10:28:14

标签: php mysql

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**只是为了减少代码的长度,但它无效。为什么我们不能像mysql_fetch_array()中那样使用多个**CODE1**

4 个答案:

答案 0 :(得分:3)

&&的{​​{3}}高于=。因此,将括号括在两个部分周围并尝试:

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

答案 1 :(得分:2)

就像在做

$true = false;

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

如果他们中的任何人因为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可以取消一个,另一个继续,但这不是很好的编程标准!

答案 2 :(得分:0)

mysql_fetch_array()逐行处理数据库结果。如果你在一个循环中执行的不仅仅是mysql_fetch_array,这意味着你只能走N行。

其中N是'$ result'选择的最小行数。

答案 3 :(得分: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]);

所以我们可以从中学习,了解你在做什么总是有帮助