2014-11-07 5 views
0

У меня сейчас странная проблема с небольшим фрагментом кода. Я потратил слишком много времени, пытаясь понять это, поэтому я решил, что спрошу здесь. У меня есть массив целых чисел ($ childID), которые я хочу использовать для индивидуального вызова хранимой процедуры в базе данных MySQL. Соединение настроено отлично, и до сих пор эта структура не давала мне никаких проблем.PHP: foreach msqli_query issue

массив $ childIDs настроен правильно, и цикл Еогеаспа делает петли через каждый целого числа в массиве как $ currentChild. Сначала я заметил, что появится только первый элемент в массиве. После некоторого тестирования я обнаружил, что после первого итерации цикла результат $ был установлен на bool (false). При этом запрос отлично работает с числами, которые я использую в массиве.

Так что мой вопрос в том, почему $result = mysqli_query($database, "CALL get_notes($currentChild);") - это ложный bool на все, кроме первой итерации цикла foreach?

Вот код:

$childIDs = array(); 
$childIDs = json_decode($_GET['childids']); 
$noteList = array(); 

foreach ($childIDs as $currentChild) 
{ 
    if ($result = mysqli_query($database, "CALL get_notes($currentChild);")) 
    { 
    // Gathers all the notes for the child 
    while($row = mysqli_fetch_array($result)) 
    { 
     // does stuff with each row, for now I'll just use an example... 
     var_dump($row); 
    } 
    } 
} 
+0

возможно, потому что $ childID - это набор объектов, а не ассоциативный массив? –

+0

Если это проблема, почему она может работать с первой итерацией цикла foreach? –

+0

Я решил. Я ответил на это решение. –

ответ

0

Это решается mysqli_next_result(). Мне нужно было освободить mysqli перед каждой новой итерацией, которая называется mysql_query(). Вот рабочий код:

$childIDs = array(); 
$childIDs = json_decode($_GET['childids']); 
$noteList = array(); 

foreach ($childIDs as $currentChild) 
{ 
    if ($result = mysqli_query($database, "CALL get_notes($currentChild);")) 
    { 
    // Gathers all the notes for the child 
    while($row = mysqli_fetch_array($result)) 
    { 
     // does stuff with each row, for now I'll just use an example... 
     var_dump($row); 
    } 
    } 

    mysqli_next_result($database); 
}