我在一个简单的博客脚本中使用左连接时遇到了一些麻烦,我写的是使用我的基本CMS。
$result = $dbc->prepare("SELECT blog.id, blog.title, blog.post, blog.date, blog.time, comments.blogid FROM blog LEFT JOIN comments ON blog.id = comments.blogid ORDER BY id DESC LIMIT $start_blog, $blog_per_page");
$result->execute();
$result->bind_result($id, $title, $post, $date, $time, $blogid);
上面的代码返回以下错误: 致命错误:在第56行的C:\ xampp \ htdocs \ pcms \ includes \ blog.php中的非对象上调用成员函数execute()(第56行为$ result - &gt; execute();)< / p>
我只是看不出导致错误的原因,如果我删除LEFT JOIN SQL代码工作正常。
答案 0 :(得分:1)
从准备功能的PHP手册:
如果数据库服务器成功准备语句,PDO :: prepare()将返回PDOStatement对象。如果数据库服务器无法成功准备语句,PDO :: prepare()将返回FALSE或发出PDOException(取决于错误处理)。
您遇到致命错误的原因是因为您没有检查准备是否成功。永远不要认为可能失败的方法是成功的。
您的准备调用失败的原因是您使用了错误的参数绑定语法。它应该是 ? (对于未命名的参数)或:variable_name(对于命名参数)。 $ variable_name不起作用。
答案 1 :(得分:1)
好的,经过多次试验和错误后,我设法获得了正确的左连接查询。如果有人发现它的使用或兴趣,这是代码。
$result = $dbc->prepare("SELECT blog.id, blog.title, blog.post, blog.date, blog.time, count(blog_comment.b_id) CommCount FROM blog LEFT JOIN blog_comment ON blog.id = blog_comment.b_id GROUP by blog.id ORDER BY id DESC LIMIT $start_blog , $blog_per_page");
$result->execute();
$result->bind_result($id, $title, $post, $date, $time, $b_id);
while ($row = $result->fetch()) {
//Code to show blog posts, using $b_id to display the number of comments
}
非常感谢您的帮助和意见,这一切都加起来找到了我渴望的解决方案!!
吉姆
答案 2 :(得分:0)
您的sql查询出错,
ORDER BY id DESC
应该是
ORDER BY comments.blogid DESC