【问题标题】:How to fetch data for two prepared statements? (MySQLi)如何为两个准备好的语句获取数据? (MySQLi)
【发布时间】:2016-01-26 17:09:23
【问题描述】:

如何使用 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();
        }

    ?>

左图是我得到的结果,右图是我应该得到的结果。

左图:

右图:

提前致谢。

【问题讨论】:

  • 您假设您的查询工作正常,根本没有进行任何错误检查。
  • @JayBlanchard 如何在代码中添加错误检查?
  • 这取决于API:您可以使用or die(mysql_error())。或者您可以在打开连接后立即添加$&lt;your_connection&gt;-&gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 以捕获 PDO 的错误。您还可以在当前的错误日志中找到问题。

标签: php html mysql css mysqli


【解决方案1】:

除非您在每次查询后调用store_result(),否则您不能在一个连接中嵌套两个准备好的语句。语句对象是指向底层结果集的指针或游标,调用store_result() 告诉 MySQL 驱动程序将整个结果集获取到内存中,从而允许您设置一个新指针。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 2011-07-09
    • 2012-01-04
    • 2014-06-25
    • 1970-01-01
    • 2016-09-11
    相关资源
    最近更新 更多