【问题标题】:Is there a functional equivalent to mysqli_fetch_all in PHP 5.2?PHP 5.2 中是否有与 mysqli_fetch_all 等效的功能?
【发布时间】:2014-10-10 18:53:17
【问题描述】:

所以,我在 PHP(以及一般的后端编程)方面完全是 n00b,但我从来没有决定要构建一个功能齐全的数据库,用户可以搜索客户端作为我的第一个 Web 的最终项目开发类。

无论如何,我在 localhost 上创建了我的网站和数据库,虽然花了一些时间,但我让一切正常运行。但是,当我尝试将其移至我的虚拟主机时,一切都开始崩溃,因为以前我不知道,该虚拟主机使用的是 PHP 5.2。我已经能够用一些可疑的安全解决方案来操纵其他所有东西(我知道,我知道,但我很绝望,无论如何这里只有假数据),但我找不到修复的一件事因为是 mysqli_fetch_all()。我收到一个 Call to undefined function mysqli_fetch_all() 错误。

我将它用于我的搜索功能:当您搜索用户时,该函数获取所有具有匹配信息的行并将其放入一个数组中,最后,所有结果数组合并为一个返回的数组。我这样做是为了忽略未输入的搜索条件并且不返回错误(NULL 一直是我在整个项目中存在的祸根)。

可以在http://webinfofinal.webatu.com/profiles.html 上查看该站点,因此您可以看到我正在使用的内容,代码如下。有什么建议?我尝试了其他 fetch 函数,但它们只返回第一个匹配的行。

        if ($firstName != null){
            $result2 = mysqli_query($con, "SELECT  displayName , firstName , lastName , eMail , age , classification , major , faveAnimes  FROM a2097702_fac.members where firstName =  '$firstName' ");
            $query2 = mysqli_fetch_all($result2,MYSQLI_ASSOC);
            $search = array_merge_recursive($search, $query2);
        }
        if ($lastName != null){
            $result3 = mysqli_query($con, "SELECT  displayName , firstName , lastName , eMail , age , classification , major , faveAnimes  FROM a2097702_fac.members where lastName =  '$lastName' ");
            $query3 = mysqli_fetch_all($result3,MYSQLI_ASSOC);
            $search = array_merge_recursive($search, $query3);
        }
        if ($eMail != null){
            $result4 = mysqli_query($con, "SELECT  displayName , firstName , lastName , eMail , age , classification , major , faveAnimes  FROM a2097702_fac.members where eMail =  '$eMail' ");
            $query4 = mysqli_fetch_all($result4,MYSQLI_ASSOC);
            $search = array_merge_recursive($search, $query4);
        }
        if ($age != null){
            $result5 = mysqli_query($con, "SELECT  displayName , firstName , lastName , eMail , age , classification , major , faveAnimes  FROM a2097702_fac.members where age =  '$age' ");
            $query5 = mysqli_fetch_all($result5,MYSQLI_ASSOC);
            $search = array_merge_recursive($search, $query5);
        }
        if ($classification != null){
            $result6 = mysqli_query($con, "SELECT  displayName , firstName , lastName , eMail , age , classification , major , faveAnimes  FROM a2097702_fac.members where classification =  '$classification' ");
            $query6 = mysqli_fetch_all($result6,MYSQLI_ASSOC);
            $search = array_merge_recursive($search, $query6);
        }
        if ($major != null){
            $result7 = mysqli_query($con, "SELECT  displayName , firstName , lastName , eMail , age , classification , major , faveAnimes  FROM a2097702_fac.members where major =  '$major' ");
            $query7 = mysqli_fetch_all($result7,MYSQLI_ASSOC);
            $search = array_merge_recursive($search, $query7);
        }           
        if ($faveAnimes != null){
            $result8 = mysqli_query($con, "SELECT  displayName , firstName , lastName , eMail , age , classification , major , faveAnimes  FROM a2097702_fac.members where faveAnimes =  '$faveAnimes' ");
            $query8 = mysqli_fetch_all($result8,MYSQLI_ASSOC);
            $search = array_merge_recursive($search, $query8);
        }

        if ($search != null){
            echo "<html>";
            echo "<head>";
            echo"<title> Anime Club Search Results | Web Info Final Project </title>";
            echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"webinfofinal.css\">";
            echo "</head>";
            echo "<div class=\"content\" style=\"width:50%; margin-left:-20%;\">";
                echo "<div class=\"header\">";
                    echo "<p></p><p>Your search results are below. </p>";
                echo "</div>";
                echo "<pre>";
                    print_r($search);
                echo "</pre>";
                echo "<p>End of results. <a href=\"profiles.html\">Search again?</a></p>";
                echo "<a href=\"login.html\"><input type='button' value='Update My Profile' id='updateProfile'></a>";
                echo "<a href=\"logout.php\"><input type='button' value='Log Out' id='logout'></a>";
            echo "</div>";
            echo "</html>";
        }

【问题讨论】:

    标签: php mysqli undefined php-5.2


    【解决方案1】:

    不,fetch_all 方法仅在您使用 mysqlnd library 时可用。

    可以为 PHP 5.2 编译 mysqlnd(请参阅 http://blog.ulf-wendel.de/2007/php-compiling-mysqlnd-with-php-525360/),但如果您的网络托管服务提供商尚未准备好升级到当前版本的 PHP,我怀疑他们会为您安装 mysqlnd。

    您可以将您的代码转换为支持PDOStatement::fetchAll()的PDO。

    或者你可以为mysqli编写自己的fetch_all函数,这并不难:

    function fetch_all($result)
    {
       $rows = array(); -- old array syntax still needed in PHP 5.2
       while ($row = $result->fetch_assoc())
              $rows[] = $row;
    
       return $rows;
    }
    

    我建议您找一个不同的网络主机。 PHP 5.2 正式报废,可能有一些安全漏洞在以后的 PHP 版本中修复,但在 5.2 中没有。见http://php.net/eol.php

    【讨论】:

    • 构造 "while ($rows[] = $result->fetch_assoc());"最后返回 false 和 (!) 将 false 添加到 $rows。您将始终获得 $rows 且最后一个元素 = false。使用“while ($row = $selection->fetch_assoc())$rows[] = $row;”而不是上面的例子。
    • @comm1x,好点,随时编辑我的答案。我不再在 Stack Overflow 上发帖了。
    • @comm1x,感谢您的编辑。但请不要更改数组语法。 OP 的问题是关于 PHP 5.2,它不支持较新的 [ ] 数组构造函数语法。
    【解决方案2】:

    感谢您的回答。我肯定会寻找新的主机,但由于时间紧迫,我只好使用代码解决方法。你的后一个解决方案或多或少是我最终做的。我查询了每一行,然后使用以下代码将具有匹配条件的行添加到数组中:

    $result1 = mysql_query("SELECT  displayName , firstName , lastName , eMail , age , classification , major , faveAnimes  FROM a2097702_fac.members ".$parameterString);
                while ($row = mysql_fetch_array($result1, MYSQL_ASSOC)){
                    array_push($results, $row);
                }
    

    【讨论】:

      猜你喜欢
      • 2011-03-31
      • 1970-01-01
      • 2012-03-21
      • 2016-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多