PHP - 预处理语句作为对象生成

时间:2016-06-18 12:07:29

标签: php mysqli prepared-statement

所以,我有以下功能:

    private function getUserData($user_nickname)
{
    if ($this->databaseConnection()) {

        $stmt1=$this->dbh->prepare('SELECT * FROM users WHERE nickname = ?');
        $stmt1->bind_param('s', $user_nickname);
        $stmt1->execute();

        return $stmt1->fetch_object();
    } 
    else {
        return false;
    }
}

我收到以下错误:致命错误:未捕获错误:调用未定义方法mysqli_stmt :: fetch_object()

我做了一些研究,但在mysqli_stmt中没有找到任何提取对象 http://php.net/manual/en/class.mysqli-stmt.php

这是否意味着如果我使用预准备语句,我不能将结果用作对象?我真的希望它能成为一个对象。

P.S。我使用mysqli。

1 个答案:

答案 0 :(得分:2)

Mysqli不是一个非常实用的API。

您可以尝试使用get_result()但它可能在您的系统上无法使用。

我建议你使用PDO而不是mysqli:

private function getUserData($user_nickname)
{
    $stmt = $this->dbh->prepare('SELECT * FROM users WHERE nickname = ?');
    $stmt->execute([$user_nickname]);
    return $stmt->fetch(PDO::FETCH_OBJ);
} 

除了mysqli的其他好处之外,PDO不仅可以返回匿名stdObject,还可以返回can create an instance of an existing class,将参数传递给构造函数。比如说,如果你有User课程,你可以写

private function getUserData($user_nickname)
{
    $stmt = $this->dbh->prepare('SELECT * FROM users WHERE nickname = ?');
    $stmt->execute([$user_nickname]);
    return $stmt->fetchObject('User');
}