【问题标题】:PHP - prepared statements result as an object [duplicate]PHP - 准备好的语句结果为对象[重复]
【发布时间】:2016-06-18 12:07:29
【问题描述】:

所以,我有以下功能:

    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 中没有找到任何 fetch 对象 http://php.net/manual/en/class.mysqli-stmt.php

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

附:我用mysqli。

【问题讨论】:

标签: php mysqli prepared-statement


【解决方案1】:

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');
}

【讨论】:

猜你喜欢
  • 2015-05-27
  • 2017-03-26
  • 2019-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-07
相关资源
最近更新 更多