我收到此消息“致命错误:在第65行的C:\ xampp \ htdocs \ pcms \ includes \ blog.php中的非对象上调用成员函数bind_param()”以使用以下代码:我正在制作的剧本。
作为一个PHP新手(编码学习),我想知道是否不可能在另一个预准备语句的while循环中使用预准备语句。
如果有人能够指出我出错的地方/其他方式(仍然使用准备好的陈述),我将非常感激。
// Load the blog data from the database and display a row for each blog post
$result = $dbc->prepare("SELECT id, title, post, date, time, blog, b_id, name, comment FROM blog ORDER BY id DESC LIMIT $start_blog , $blog_per_page");
$result->execute();
$result->bind_result($id, $title, $post, $date, $time, $blog, $b_id, $name, $comment);
<?php
while ($row = $result->fetch()) {
if ($blog == 1) {
// Count the number of comments for the current blog post
$count = $dbc->prepare("SELECT COUNT( b_id ) FROM blog WHERE b_id = ?");
$count->bind_param('s', $id); <-- Line 65
$count->execute();
$count->store_result();
$no_comments=$count->num_rows;
?>
<div style="margin-top:15px; margin-bottom:15px; border:1px solid #444444; padding:7px;">
<div style="float:left; width:50%;"><b><?php echo $title; ?></b></div>
<div style="float:right; text-align:right; width:50%;"><?php echo $date; ?> at <?php echo $time; ?></div>
<div style="width:100%; padding-top:25px;"><?php echo nl2br(substr($post, 0, 100));?><?php if (strlen($post) >= 100); { echo '...'; } ?></div>
<div style="width:100%; padding-top:25px;"><?php echo "<a href=\"$page-p-$id.html\" title=\"View comments for $title\"><i>Comments ($no_comments)</i></a> "; ?></div>
</div>
<?php
}
}
?>
非常感谢 吉姆
答案 0 :(得分:1)
手册描述了bind_param第一个参数是“参数标识符。对于使用命名占位符的预准备语句,这将是表单的参数名称:name。对于使用问号占位符的预准备语句,这将是1索引参数的位置。“所以尝试使用
$count->bind_param(1, $id);
//or
$count = $dbc->prepare("SELECT COUNT( b_id ) FROM blog WHERE b_id = :named");
$count->bind_param(':named', $id);
http://www.php.net/manual/en/pdostatement.bindparam.php
所以如果PDO无法创建预准备语句,它将返回false,而不是对象,这就是你得到的内容。