更改服务器后调用未定义的方法mysqli :: mysqli_fetch_all()

时间:2016-12-10 09:53:51

标签: php mysql mysqli

我的脚本在我的本地主机上工作正常,当我将其上传到我的在线主机时,出现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;
        }
    }
}

3 个答案:

答案 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,它建立了连接并解决了此错误。