我一直在尝试执行一系列嵌套循环,从一个表中选择数据库名称,然后查询该数据库中选定的表,然后将结果相加并显示它们的数量和数据库名称。
我已经让代码正常工作了,但它一直显示:
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;
}所有数据库连接都已建立,并且工作正常,因此与此无关。任何帮助都是最好的。
发布于 2012-04-11 21:47:39
你需要引入错误处理,你也可以简化你的代码。当前的故障点是查询数据库和从数据库获取,因此您可以将其封装到它自己的函数中,这也将减少您的代码:
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);
}发布于 2012-04-11 21:25:57
这是因为如果查询失败,mysql_query会返回false,因此其中一个查询会失败,并且mysql_fetch_array()会得到一个布尔值。尝试将$db = $data[' dbname '];更改为$db = $data['dbname'];
https://stackoverflow.com/questions/10106819
复制相似问题