PHP mysqli_fetch_all给了我一个空白的屏幕

时间:2014-05-14 16:16:05

标签: php mysqli

我只是将一些东西从我的本地机器推送到现场网站,到处都是空白页面。当我使用所有内容时,我将问题跟踪到mysqli_fetch_all。它为什么这样做?以及如何解决?如果我使用mysqli_fetch_array或mysqli_fetch_row或mysqli_fetch_assoc它可以工作,但我的数据显示不正确。

这是破坏的功能之一:

function getUserFields($connection){

        $query = mysqli_query($connection, "DESCRIBE `adminUsers`");
        $results = mysqli_fetch_all($query, MYSQLI_ASSOC);
        return $results;

}

$connection是我的数据库的连接,我已经确认工作和$查询sting正在填充,只是mysqli_fetch_all不起作用,我怎么能在没有功能的情况下解决这个问题调整当前数据的显示方式。

2 个答案:

答案 0 :(得分:3)

函数mysqli_fetch_all()及其面向对象(mysqli_result::fetch_all)仅在PHP 5.3及更高版本中可用。

您的服务器似乎正在运行较低版本的PHP,或者您缺少MySQL Native Driver (which this function depends on),这解释了为什么其他获取功能可以正常工作而这不会。

来自Manual

  

mysqli_fetch_all
  mysqli_result :: fetch_all
  (PHP 5> = 5.3.0)

为了将来的调试,打开错误或引用您的错误日志,因为这通常有助于识别问题。

error_reporting(E_ALL);
ini_set('display_errors', '1');

如果您无权升级PHP版本或安装MySQLND,您只需将代码转换为使用mysqli_fetch_assoc()手动迭代:

function getUserFields($connection){
    $query = mysqli_query($connection, "DESCRIBE `adminUsers`");    
    $results = array();

    if($query){
        while($row = mysqli_fetch_assoc($query)){
            $results[] = $row;
        }
    }

    return $results;
}

答案 1 :(得分:2)

根据php文档,此函数仅仅限mysqlnd (MySQL本机驱动程序)。如果您没有在服务器上安装它,它将不会执行(并抛出错误)。

  

仅适用于mysqlnd。

     

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

访问http://www.php.net/manual/en/mysqli-result.fetch-all.php#refsect1-mysqli-result.fetch-all-mysqlnd了解有关此内容的更多信息。

请考虑使用mysqli_fetch_array - http://www.php.net/manual/en/mysqli-result.fetch-all.php。它使用几乎相同的参数,因此应该没有问题。

问题可能存在于其他地方,但这是我的第一次猜测(尚未启用错误报告:/)

编辑: 您将需要迭代结果,因为mysqli_fetch_array(以及此系列中的其他函数)一次返回一行。这可能是您在使用它们时导致结果错误的原因。

其他解决方案是在服务器上的php.ini中启用php_mysqlnd.dll / php_mysqlnd.so扩展并重新启动服务(您可能已经在本地计算机上,这就是它的工作原理)