致命错误:调用未定义的方法mysqli_result::fetch_all()

24

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

Call to undefined method 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模块。我该如何安装它?这可能是问题所在吗?


当你说它在不同的平台上“工作” - 你是指两个独立的PHP和MySql安装?还是指浏览器? - Lix
请检查我的答案这里。https://dev59.com/KGw15IYBdhLWcg3wT6D2#56677161 - javatar
3个回答

40

10
Ubuntu用户只需执行以下命令:sudo apt-get install php5-mysqlnd - Aust
@Ibrahim,在哪里下载 - Pacerier
@Pacerier,你使用的是哪个操作系统? - Ibrahim Azhar Armar
@IbrahimAzharArmar,Win Server 2003。 - Pacerier
尝试启用mysqlnd扩展,这里有帮助链接 https://dev59.com/X37aa4cB1Zd3GeqPvtxq - Ibrahim Azhar Armar
以下是一些供您参考的链接:http://php.net/manual/en/mysqlnd.install.php,https://dev.mysql.com/downloads/connector/php-mysqlnd/。不幸的是,我不使用Windows,因此无法测试。如果这不起作用,请尝试升级您的PHP版本,可能会有所帮助。 - Ibrahim Azhar Armar

4
fetch_all 消耗的内存比 fetch_array() 更多,并且有其他负面影响,因此,与其修复 fetch_all使用 fetch_arrayfetch_assoc 是更好的选择。 PHP 文档中有详细说明:

仅适用于 mysqlnd。

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

如果您真的想使用它,则必须安装带有本地驱动程序的 MySQL(mysqlnd)。示例安装方法:
./configure --with-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \

在Ubuntu上,您只需要执行以下操作:
sudo apt-get install php5-mysqlnd

1
但是你的问题答案在哪里? - Sebastian Mach
这必须是一个注释。 - Leandro Bardelli


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接