2012-04-11 21 views
3

私は一連の入れ子になったループを使って1つのテーブルからデータベース名を選択し、そのデータベース内の選択したテーブルを照会し、結果を合計してその数を表示しようとしていますデータベース名。ネストされたWhileループphp

私が動作するようにコードを得ているが、それは表示し続ける:

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

は' '$行[「changemade」] =でなければなりません= 1) ' –

+0

お客様のスキーマを顧客表に表示する必要があります。 – wachpwnski

答えて

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

を、あなたのコードは今よりですコンパクトで、それが持っている実際のエラー処理:あなたは$行[「changemade」] == 1) `代わりに本物の単一引用符のカーリーアポストロフィの束を持って

$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); 
} 
+0

+1私はあなたのことがもう少し完全であるので、私を削除します。 –

+0

ありがとう@hakreは素晴らしい作品です。 – m4773rz

1

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

関連する問題