У меня странная проблема с небольшим кусочком кода прямо сейчас. Я потратил слишком много времени, пытаясь понять это, поэтому я решил спросить здесь. У меня есть массив целых чисел ($ childIDs), которые я хочу использовать для индивидуального вызова хранимой процедуры в базе данных MySQL. Соединение настроено нормально, и эта структура не доставляла мне никаких проблем до сих пор.
$ childIDs массив настроен правильно, и цикл foreach делает цикл через каждое целое число в массиве как $ currentChild. Сначала я заметил, что будет отображаться только первый элемент в массиве. После некоторого тестирования я обнаружил, что $ result устанавливался в bool (false) после первой итерации цикла. При этом запрос отлично работает с числами, которые я использую в массиве.
Итак, мой вопрос почему $result = mysqli_query($database, "CALL get_notes($currentChild);")
это ложный бул на все, кроме первой итерации цикла 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);
}
}
}
Это решается 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);
}
Других решений пока нет …