准备好的语句检索结果:为什么bind_result()工作而get_result()不工作?

时间:2016-03-12 12:39:53

标签: php mysql

我现在正在努力解决这个问题一段时间,到处寻找答案。 Post:Example of how to use bind_result vs get_result给出了一个很好的解释,说明如何使用两种不同的方法来检索已执行的预处理语句的结果。这也符合我发现的其他答案。我有PHP版本5.6.15所以对于get_result()这也不应该是一个问题(只能从> 5.3获得)。

我有一个面向对象的编程环境,但为了测试起见,将示例条带化为最小程序,并从数据库中选择一行来查找错误。

结果:我的“bind_result()”版本运行正常并返回:

ID: 1
Content: Test1

并且“get_result()”版本返回:

"Call to a member function fetch_assoc() on boolean in ...".

我尝试了很多变化以使其正常工作,但是将其恢复到以下最小值应该可行,但事实并非如此。有人可以帮忙吗?

我在数据库中的测试表有两列:“id”和“content”。

使用bind_result()的工作版本:

<!DOCTYPE html>
<html lang="en">
    <?php 
        static $connection;
        $config = parse_ini_file('../config.ini');
        $connection = new mysqli('localhost',$config['username'],$config['password'],$config['dbname']);    

        $query = "SELECT * FROM test WHERE id = ?";
        $id = 1;
        $stmt = $connection->prepare($query);
        $stmt->bind_param('i',$id);
        $stmt->execute();

        $stmt->store_result();
        $stmt->bind_result($id, $content);
        while ($stmt->fetch()) {
          echo 'ID: '.$id.'<br>';
          echo 'Content: '.$content.'<br>';
        }

        $stmt->free_result();
        $stmt->close();
        $connection->close();

    ?>
</html>

所以带有get_result()的版本不起作用:

<!DOCTYPE html>
<html lang="en">
    <?php 
       static $connection;
       $config = parse_ini_file('../config.ini');
       $connection = new mysqli('localhost',$config['username'],$config['password'],$config['dbname']); 

       $query = "SELECT * FROM test WHERE id = ?";
       $id = 1;
       $stmt = $connection->prepare($query);
       $stmt->bind_param('i',$id);
       $stmt->execute();

       $stmt->store_result();
       $result = $stmt->get_result();
       while ($row = $result->fetch_assoc()) {
        echo 'ID: '.$row['id'].'<br>';
        echo 'Content: '.$row['content'].'<br>';
       }

       $stmt->free_result();
       $stmt->close();
       $connection->close();

    ?>
</html>

1 个答案:

答案 0 :(得分:1)

我终于找到了问题。通过这篇文章:Example of how to use bind_result vs get_result 以及@Coolen的评论。 在get_result版本中,行:$ stmt-&gt; store_result(); 应该删除!