为什么我要在非对象上调用成员函数bind_param()......?

时间:2014-04-16 20:15:40

标签: php

我正在上课,我添加了一个评论系统。我现在想要添加报告评论的功能。

我在评论表中添加了一个名为report_active的列,我的想法是当它处于活动状态时(意味着已经报告)将其设置为1,当它不是时,将其设置为0。然后只需在adminCP中列出所有注释,并在其上显示活动报告。

我创建了一个名为report_comment.php的文件,我打算只用它来运行查询,然后重定向回另一个页面。

这是我的report_comment.php页面:

<?php
require_once('db_connect.php');
require_once('security.php');

if (isset($_GET['id'])) {
        $report_active = 1;
        $id            = $_GET['id'];

        $select = $db->query("SELECT * FROM comments WHERE id = ?");
        $select->bind_param('i', $id);
        if ($select->execute()) {
                if ($select->num_rows) {
                        // Run the update query
                        $update = $db->query("UPDATE comments SET report_active = ? WHERE id = ?");
                        $update->bind_param('ii', $report_active, $id);
                        if ($update->execute()) {
                                header('Location: comments.php');
                                die();
                        }
                }
        }
}
?>

我做错了什么?因为这是我带来的错误:

Fatal error: Call to a member function bind_param() on a non-object

1 个答案:

答案 0 :(得分:1)

$select = $db->query("SELECT * FROM comments WHERE id = ?");
               ^^^^^---execute the query immediately

你想要

$stmt = $db->prepare("SELECT * FROM comment WHERE id = ?");
             ^^^^^^^---note the diff

代替。另外,你应该检查是否有失败,例如

if ($stmt === false) {
   die("Prepare failed with error: " . $db->errorInfo);
}

或类似的特定数据库库。