我的脚本在我的本地主机上工作正常,当我将其上传到我的在线主机时,出现Call to undefined method mysqli::mysqli_fetch_all()
错误。我在线阅读并发现它与缺少的MySQLnd驱动程序有关。
我的主机使用c面板,我无法安装任何扩展程序。我的本地php版本是5.5.12,我托管服务器上的版本是5.6.26,MySQL版本是5.5.52-cll。
在阅读之后,我将fetch_all()
更改为fetch_assoc()
,错误消失但DB只返回一个结果,即使我在循环中使用它。我做错了什么?
if (!$errors) {
if ($result = $mysqli->query($addresult)) {
while ($row = $result->fetch_all()) {
$returnResult = $row;
}
}
}
答案 0 :(得分:1)
fetch_all
将整个结果集收集到一个大的多维数组中。 fetch_assoc
将每一行收集到一维数组中。
因此,您需要循环将数据添加到数组以获取完整集。您目前只是在每次循环时重新定义变量,因此它将始终包含最后一个值。
您需要的内容如下:
$returnResult = []; //initialise empty array
while($row = $result->fetch_assoc())
{
$returnResult[] = $row;
}
答案 1 :(得分:0)
实际上你是在循环中一次又一次地覆盖你的变量$returnResult
,如下所示: -
$returnResult = array(); // array variable
if(!$errors) {
if( $result = $mysqli->query($addresult) ) {
while($row = $result->fetch_assoc()) // use fetch_assoc here
{
$returnResult[] = $row; // assign each value to array
}
}
}
注意: - 我在评论中看到你的jquery代码,所以只需更改上面代码中的一行: -
$returnResult[] = array_values($row);
答案 2 :(得分:0)
如果$ link / $ con / $ mysqli连接未激活(无效),也会发生这种情况。
检查是否已建立连接。
在我的情况下,我在同一页面上两次使用了required_once('link.php')。
在第二次通话中引发了此错误。在这里,当我使用required('link.php')时,而不是required_once,它建立了连接并解决了此错误。