嵌套的While循环(PHP)

3

我一直在尝试编写一系列嵌套循环,以从一个表中选择数据库名称,然后查询该数据库中的选定表,并累加结果并显示它们的数量和数据库名称。

我已经让代码正常工作了,但它不断显示:

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in

我已经尝试了网上找到的所有方法来解决问题,但都没有成功。

$resulta = mysql_query("SELECT dbname AF012 FROM Customer");

while($data = mysql_fetch_array($resulta))
  {
    $db = $data[' dbname '];

$result = null;
$result2 = mysql_query("SELECT changemade FROM $db.orders");
//looping through the results
while($row = mysql_fetch_array($result2))
  {
    //checking if any record is 1,2 or 3
  if( ($row[‘changemade’]== 1) || ($row[‘changemade’]== 2) || ($row[‘changemade’]== 3) )          {
      //if any match the if adding 1 to the counter
      $counter ++;
    }
     }
 unset($result2);
echo $db."  ".$counter;
 echo "<br>";
 $counter = 0;
 $result = null;
 $result2 = null;
}

所有数据库连接都已建立并正常运行,所以与此无关。希望能得到帮助。

2
你使用了一堆花括号代替真正的单引号 $row[‘changemade’]== 1) 应该是 $row['changemade']== 1) - Michael Berkowski
我需要看一下你的客户表模式。 - wachpwnski
2个回答

4

您需要引入错误处理,同时可以简化代码。目前的故障点是查询数据库并从中获取数据,因此可以将其封装为一个单独的函数,这也将减少您的代码:

function mysql_query_array($query)
{
    if (!$result = mysql_query($query)) {
        throw new Exception(sprintf('Invalid query "%s", error: %s.', $query, mysql_error()));
    }
    return function () use ($result) {
        return mysql_fetch_array($result);
    };
}

有了这个小助手函数,你的代码现在更加简洁,并且具有实际的错误处理:

$queryA = mysql_query_array("SELECT dbname AF012 FROM Customer");
while ($data = $queryA())
{
    $counter = 0;
    $queryB = mysql_query_array("SELECT changemade FROM {$data['dbname']}.orders");
    while ($row = $queryB())
    {
        if (in_array($row['changemade'], range(1, 3))) {
            $counter++;
        }
    }
    printf("%s  %s<br>\n", $db, $counter);
}

1
这是由于mysql_query在查询失败时返回false,因此您的查询之一失败了,并且mysql_fetch_array()得到了一个布尔值。尝试将$db = $data[' dbname '];更改为$db = $data['dbname'];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接