23

我在 Ubuntu 10.04 中遇到了 PHP 问题。当我尝试使用 mysqli_result::fetch_all 时出现此错误:

调用未定义的方法 mysqli_result::fetch_all()

但是,它适用于 Windows XP。

编码:

$result = $this->dbh->query('SELECT [...] ');
return $result->fetch_all(MYSQLI_ASSOC);

我不想将fetch_assoc与循环一起使用,因为我将结果发送到另一层进行处理。

我正在使用 PHP 5.4.4。和php -m | grep mysql没有出现的 mysqlnd 模块。我该如何安装它?这可能是问题吗?

4

3 回答 3

40

mysqli_result::fetch_all() 需要 MySQL 本机驱动程序 (mysqlnd)。

您可能会错过它。

看看这个帖子,可能对你有帮助。

mysqli fetch_all() 不是一个有效的函数?

于 2012-07-26T07:47:41.253 回答
4

fetch_all比 fetch_array() 消耗更多的内存并且有其他不利的副作用,所以与其 fix fetch_all不如使用fetch_arrayorfetch_assoc

详细来自 PHP 文档:

仅适用于 mysqlnd。

由于 mysqli_fetch_all() 在单个步骤中将所有行作为数组返回,因此它可能比一些类似的函数(例如 mysqli_fetch_array())消耗更多的内存,后者一次只从结果集中返回一行。此外,如果您需要对结果集进行迭代,您将需要一个循环结构来进一步影响性能。由于这些原因,mysqli_fetch_all() 应该只用于那些将获取的结果集发送到另一层进行处理的情况。

如果你真的要使用它,你必须使用本机驱动(mysqlnd)安装 mySQL 示例安装:

./configure --with-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \

在 Ubuntu 上你可以做

sudo apt-get install php5-mysqlnd
于 2013-01-14T05:02:11.123 回答
3

http://www.php.net/manual/en/mysqli-result.fetch-all.php

仅适用于 mysqlnd。

关于启用的说明mysqlndhttp ://www.php.net/manual/en/mysqlnd.install.php

于 2012-07-26T07:50:43.767 回答