3

私は一連のネストされたループを取得して、1 つのテーブルからデータベース名を選択し、そのデータベースで選択したテーブルをクエリし、結果を合計してそれらの数とデータベース名を表示しようとしました。

コードが機能するようになりましたが、表示され続けます:

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;
}

すべてのデータベース接続が確立され、正常に動作するため、それとは関係ありません。どんな助けでも素晴らしいでしょう。

4

2 に答える 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);
}
于 2012-04-11T13:47:39.417 に答える
1

これはmysql_query、クエリが失敗した場合に false を返すため、クエリの 1 つが失敗しmysql_fetch_array()てブール値を取得することが原因です。に変更 $db = $data[' dbname '];して みてください$db = $data['dbname'];

于 2012-04-11T13:25:57.483 に答える