【问题标题】:How do I get a mysqli_result when the mysqli result instance is wrapped in a third-party class?当 mysqli 结果实例包装在第三方类中时,如何获取 mysqli_result?
【发布时间】:2026-02-13 00:10:01
【问题描述】:

通常当我使用mysqli时,我的查询如下:

$query = $mysql->query("SELECT * FROM .........");
$data = $mysql->fetch_assoc();

但是,这是不可能的

$mQuery = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_product WHERE `order_id` = $orderid");
while($mData = $mQuery->fetch_assoc()) {
...
}

如何将其转换为功能代码?

我收到以下错误:

致命错误:调用未定义的方法 stdClass::fetch_assoc()

【问题讨论】:

  • 有可能。如果 db->query(...) 失败 $mQuery == NULL。现在你不能使用while($mData = $mQuery->fetch_assoc()) !!正如我所说,你必须测试$mQuery != NULL

标签: php oop mysqli


【解决方案1】:

没有区别:在第一个示例中,您在 $mysql 对象上调用方法,因此在第二个示例中您应该这样做:

$mQuery = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_product WHERE `order_id` = $orderid");
while($mData = $this->db->fetch_assoc()) {
  //           ^^^^^^^^^ The same object of which you called the query method
  ...
}

【讨论】:

  • 致命错误:调用未定义的方法 DB::fetch_assoc()
  • @Chriham 如果你在这里得到它,你将在你的第一个例子中得到它,并且它们完全相同。
  • @jeroen:如果不使用$mQuery,我从来没有看到过:如您所见:array mysqli_result::fetch_assoc (void)。 fetch_assoc 是 mysqli_result 类的一部分。不是mysqli — The mysqli class 的一部分! $mQuerymysqli_result
  • 更广泛的一点是,您在 MySQLi 之上使用某种抽象层,现在您正在返回“DB”类的实例(无论 *THAT( 是什么),而不是返回 mysqli_result 实例。
【解决方案2】:

$this->db->query 后面的函数需要返回一个 mysqli_result 实例而不是返回一个 stdClass。

【讨论】:

  • 不正确:$this->db->query needs to return the mysqli instance 正确:需要返回 mysqli_result 实例。
  • 感谢@moskito-x 纠正我 - 我不使用 MySQLi,忘记了 API。我应该在发帖前检查一下。