在mysql准备语句中调用非对象错误的成员函数

时间:2016-05-21 09:27:00

标签: php mysql

我正在向我的页面添加一个关注配置文件功能。

如果数据库中有一行包含配置文件ID和会话ID,我有一个Follow按钮更改为Unfollow。如果此人点击取消关注,我会收到错误消息:

  

致命错误:在blah blah第20行中的非对象上调用成员函数execute()

这是我正在运行的代码:

function isFollow($mysqli){
if(isset($_POST['isFollow']))
    {
        $fed_id = filter_input(INPUT_POST, 'fed_id', FILTER_SANITIZE_NUMBER_INT);
        $fing_id = filter_input(INPUT_POST, 'fing_id', FILTER_SANITIZE_NUMBER_INT);
        $isFollow = filter_input(INPUT_POST, 'isFollow', FILTER_SANITIZE_NUMBER_INT);
        if($isFollow==0)
        {
            $fing_time=date("Y-m-d H:i:s");
            $insert_stmt = $mysqli->prepare("INSERT INTO follower (fed_user, fing_user, date_time) VALUES (?, ?, ?)");
            $insert_stmt->bind_param('iii', $fed_id, $fing_id, $fing_time);
            if($insert_stmt->execute())
            {
                header("Location:../?profile=".$fed_id."");
            }
        }elseif($isFollow==1)
        {
            $delete_stmt = $mysqli->prepare("DELETE FROM follower WHERE fed_id = ? AND fing_id = ?");
            $delete_stmt->bind_param('ii', $fed_id, $fing_id);
            if($delete_stmt->execute())
            {
                header("Location:../?profile=".$fed_id."");
            }
        }
}else
{
    die("Error!");
}
}

代码的第一部分有效。它添加了mysql。它不会从中删除。

第20行

$delete_stmt = $mysqli->prepare("DELETE FROM follower WHERE fed_id = ? AND fing_id = ?");

请注意它一直有效,直到这部分:

elseif($isFollow==1)
    {
        $delete_stmt = $mysqli->prepare("DELETE FROM follower WHERE fed_id = ? AND fing_id = ?");
        $delete_stmt->bind_param('ii', $fed_id, $fing_id);
        if($delete_stmt->execute())
        {
            header("Location:../?profile=".$fed_id."");
        }
    }

1 个答案:

答案 0 :(得分:1)

这很可能是由于准备失败。尝试使用

打印错误
trigger_error( $mysqli->error, E_USER_ERROR );
在第20行之后

检查出了什么问题。

您可能还想检查 $ delete_stmt 正在使用的类型和值

print_r( $delete_stmt );

或类似。