致命错误:使用PHP中的MySQL Left Join调用非对象上的成员函数execute()

时间:2011-11-23 11:03:28

标签: php fatal-error

我在一个简单的博客脚本中使用左连接时遇到了一些麻烦,我写的是使用我的基本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代码工作正常。

3 个答案:

答案 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