【问题标题】:mysqli fetch_all() not a valid function?mysqli fetch_all() 不是一个有效的函数?
【发布时间】:2011-10-05 09:13:57
【问题描述】:

感谢答案,我发现我无法使用fetch_all(),因为我正在使用PHP 5.2.17 - fetch_assocwhile 循环工作。


我正在使用的函数fetch_all 返回此错误:

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

$mysqli = new mysqli($host, $username, $password, $database);
$query = "LONG QUERY that works, tested in phpmyadmin"
$result = $mysqli->query($query);
$result->fetch_all(); or  $mysqli->fetch_all() tried both
mysqli_fetch_all() was already tried.
$mysqli->close(); 

我能够连接到数据库并且我已经提取了单行。当我将查询放在 PHPMYADMIN 中时,我得到了 5 行。

这个功能还能用吗?有没有一种方法可以让我自己将数据放入 assoc 数组中?

【问题讨论】:

    标签: php mysqli


    【解决方案1】:

    此功能自 PHP 5.3.0 起可用。可能您的版本较旧。请改用fetch_assoc()

    while ($row = $result->fetch_assoc()) {
        // do what you need.
    }
    

    【讨论】:

      【解决方案2】:

      mysqli::fetch_all()需要安装mysqlnd驱动才能使用。

      【讨论】:

      • 是的,如果你有一个正在运行的 roundcube(在 Debian 上),它将停止工作,因为 mysqlnd 删除了 php-mdb2-driver-mysql 和 roundcube-mysql 驱动程序。所以安装mysqlnd要谨慎
      【解决方案3】:

      构造关联数组的典型方法是在while 循环中:

      $results_array = array();
      $result = $mysqli->query($query);
      while ($row = $result->fetch_assoc()) {
        $results_array[] = $row;
      }
      

      【讨论】:

        【解决方案4】:

        问题似乎是 'mysqli' 和 'mysqlnd' 不能一起工作。我在 cpanel 中遇到了同样的问题

        步骤:

        1) 转到 CPanel 仪表板

        2) 转到“选择 PHP 版本”,您应该会看到一堆复选框

        3) 设置PHP版本(5.4或以上)

        4) 取消选中“mysqli”扩展名并选中“mysqlind”和“nd_mysqli”

        显然 'nd_mysqli' 是 'mysqli' 但配置为与 'mysqlind' 一起工作,并且由于设置冲突,您必须取消选中 'mysqli'。

        以下我找到的答案 here 帮助了我。

        【讨论】:

        • 这是正确答案。这不是关于 PHP 版本,而是关于扩展。必须是 nd_mysqli 和 mysqlind。我的主机预选了 mysqli 和 nd_mysqli,这就是 mysqli_fetch_all 不起作用的原因。
        • 正确答案!非常感谢,我不知道为什么会这样,但它帮助了我^^
        • 正确!非常感谢!!
        • 不要只是一时兴起更改此设置,它可能会产生严重影响。这样做会关闭我的网站,直到我恢复更改。
        • 非常感谢它也对我有用
        【解决方案5】:

        请谨慎使用 fetch_all():

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

        阅读有关 mysqldn 要求的说明。

        【讨论】:

        • 在该页面上找不到任何有关 mysqldn 要求的信息。您能否详细说明,为什么 fetch_all() 是“邪恶的”?谢谢
        【解决方案6】:

        作为 Fabrizios 答案的补充,请考虑使用循环构建您的数组:

        $array = array();
        while($row = $result->fetch_assoc())
            $array[] = $row;
        

        【讨论】:

          【解决方案7】:

          如果您不想使用 Karolis 的答案进行迭代, 使用

               while($row = mysqli_fetch_array($result,MYSQLI_ASSOC))
              {
                 $rows[] = $row;
              }
          

          达到和

          一样的效果
          $rows = mysqli_fetch_all($result, MYSQLI_ASSOC);
          

          您可以将常量更改为MYSQLI_NUMMYSQLI_BOTH。 这个可选参数是常量,指示应该从当前行数据生成什么类型​​的数组。

          注意mysqli_fetch_array($result,MYSQLI_ASSOC ) 的行为与mysqli_fetch_assoc() 函数相同,而mysqli_fetch_array($result,MYSQLI_NUM) 的行为与mysqli_fetch_row() 函数相同。最后一个选项MYSQLI_BOTH 将创建一个具有两者属性的数组。 http://php.net/manual/en/mysqli-result.fetch-array.php

          【讨论】:

          • 这个答案本质上是错误的。 mysqli_fetch_array($result, MYSQLI_ASSOC); 没有达到与$rows = mysqli_fetch_all($result, MYSQLI_ASSOC);相同的结果@
          • 有趣的是我没有注意到这一点。感谢@YourCommonSense
          【解决方案8】:

          我有 5.6,但无论如何都没有为我工作。通过启用 mysqlnd 驱动程序,它对我有用。只需写apt-get install php5-mysqlnd 然后重启 php 就可以了!

          【讨论】:

            【解决方案9】:

            PHP 致命错误:调用未定义函数 mysqli_fetch_all()

            $rows = mysqli_fetch_all($result, MYSQLI_ASSOC);//not work
            

            更改为:php 5.3 或

            $query = "SELECT * FROM `user_counter` ORDER BY id DESC LIMIT 20";
            $result =  mysqli_query($connection, $query) or die
            ("Error in Selecting " . mysqli_error($connection));
            $rows = array();
            while ($row = $result->fetch_assoc()) {
                $rows[] = $row;
            }
            echo json_encode($rows);
            

            【讨论】:

              【解决方案10】:

              只是添加关于mysqlnd 驱动程序的附加说明:它还必须安装mysqli API 扩展。如果没有扩展,fetch_all() 仍然不可用。我在排除为什么我的代码在一台服务器上运行但在另一台服务器上运行时发现这一点,两者都是 PHP > 5.3。使用phpinfo() 验证已安装的扩展。

              【讨论】:

                【解决方案11】:
                function runQuery($query) {
                        $result = mysqli_query($this->conn,$query);
                                $resultset  = array(); //you need to define array
                                         while($row=$result->fetch_assoc()) {
                                              $resultset[] = $row; //then insert result into the array
                            }       
                            if(!empty($resultset))
                            {
                
                            return $resultset;}
                            else{return 'empty';};
                    }
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2013-10-05
                  • 1970-01-01
                  • 2023-03-22
                  • 1970-01-01
                  • 2016-06-06
                  相关资源
                  最近更新 更多