我现在正在努力解决这个问题一段时间,到处寻找答案。 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>
答案 0 :(得分:1)
我终于找到了问题。通过这篇文章:Example of how to use bind_result vs get_result 以及@Coolen的评论。 在get_result版本中,行:$ stmt-&gt; store_result(); 应该删除!