2012-04-11 4 views
3

Я пытаюсь получить серию вложенных циклов, которые работают, чтобы выбрать имя базы данных из одной таблицы, затем запросить выбранную таблицу в этой базе данных и добавить результаты и отобразить их число и имя базы данных.Вложенные While Loops 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)' должна быть '$ строки [«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); 
    }; 
} 

С этой маленькой вспомогательной функцией, ваш код теперь более компактна и имеет фактическая обработка ошибок:

$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, если запрос завершается с ошибкой, поэтому один из ваших запросов завершается с ошибкой, а mysql_fetch_array() получает логическое значение. Попытайтесь изменить: $db = $data[' dbname ']; - $db = $data['dbname'];