Как получить данные для двух подготовленных операторов? (MySQLi)

94
8

Как получить результаты для двух подготовленных операторов с помощью MySQLi?

Я пытаюсь получить данные для двух подготовленных операторов. $ stmt представляет contentBox div, а $ stmt2 представляет div.

$ stmt работает, успешно извлекает поля содержимого без каких-либо ошибок. По какой-то причине $ stmt2 не загружает никаких результатов.

Вот мой код:

<?php

if ($stmt = $conn->prepare("SELECT 'id', 'name' FROM ranks ORDER BY 'id' DESC"))
{
$stmt->execute();
$stmt->bind_result($id, $rank);

while($stmt->fetch())
{
echo '<div class="contentBox">
<div class="contentHeader headerOwner">' . $rank . '</div>
<div class="contentInside" style="width:auto;margin:auto;text-align:center;margin-top: -2px;margin-left: 3px;margin-bottom: -4px;">';

if ($stmt2 = $conn->prepare("SELECT 'id', 'username', 'look', 'online' FROM 'users' WHERE 'rank' = ?"))
{
$stmt2->bind_param('i', $id);
$stmt2->execute();
$stmt2->bind_result($id2, $username, $look, $online);

if ($stmt->num_rows <= 0)
{
echo '<div class="alert alert-danger">No records found.</div>';
}
else
{
while($stmt2->fetch())
{
echo '<div class="staffBox">
<div class="staffPicture" style="background-image: url(\'/media/useravatars/DefaultAvatar.png\');"></div>
<div class="staffName">
<div class="staffHabbo"><img src="https://www.habbo.nl/habbo-imaging/avatarimage?figure=ca-1801-1408.ch-3334-110-1408.ha-3331-110.hr-115-61.lg-3337-110.hd-180-1007.sh-3338-1408&direction=4&head_direction=4&action=wav&size=s" border="0"/></div>
<p style="margin: 5px 0px;font-weight: bold;"><a href="/user/' . $username . '" ng-click="progress()" class="username-black" tooltips="" tooltip-title="' . $username . '">' . $username . '</a></p>
<p style="margin: 5px 0px;">Owner</p>
<p style="margin: 5px 0px;"><i>United States</i></p>
</div></div>';
}
}

$stmt2->close();
}

echo '</div>
</div>';
}

$stmt->close();
}

?>

Левое изображение - результат, который я получаю, и правильный образ - результат, который я должен получить.

левое изображение:

enter image description here

правильное изображение:

enter image description here

Заранее спасибо.

спросил(а) 2016-01-26T20:09:00+03:00 4 года, 5 месяцев назад
1
Решение
54

Вы не можете вложить два подготовленных оператора из одного соединения, если вы не вызовете store_result() после каждого запроса. Объектом оператора является указатель или указатель на базовый набор результатов, вызывающий store_result() указывает драйверу MySQL на выборку всего набора результатов в память, позволяя вам установить новый указатель.

ответил(а) 2016-01-26T20:27:00+03:00 4 года, 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема