如何使用MySQLi获取两个预准备语句的结果?
我正在尝试获取两个预准备语句的数据。 $ stmt 表示contentBox div, $ stmt2 表示staffBox 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();
}
?>
左图是我得到的结果,右图是我应该得到的结果。
左图:
右图:
提前致谢。
答案 0 :(得分:1)
除非您在每次查询后调用store_result(),否则您无法在单个连接中嵌套两个预准备语句。语句对象是指向底层结果集的指针或游标,调用store_result()
告诉MySQL驱动程序将整个结果集提取到内存中,允许您设置新指针。