猿问

PHP 警告 mysqli_fetch_assoc()

PHP 版本:7.1 我一直在关注 mmtuts PHP 视频,了解如何为用户构建上传选项。当我观看视频时,他编写的代码在 localhost(通过 xampp 的数据库(mysql))上运行良好,但是当我去 HostGator 将其连接到实际数据库时。我收到错误消息


致命错误:未捕获的错误:在第 45 行的 gallery.php 中调用未定义函数 mysqli_stmt_get_result()


我在这个网站上查找了错误,大多数答案都说要检查我的 PHP 扩展,但我无法在 PHP.INI 下的 Hostgator 控制面板中找到扩展 mysqlnd 和 nd_mysqli。如果你能指导我完成那将不胜感激。然而,其他答案也表明我可以使用 bind 和 fetch 方法,即使在查看了如何将此代码转换为 bind 和 fetch 方法之后,我真的不理解它。我对 PHP 完全陌生(尝试学习的第 7 天),所以我正在寻求有关如何解决此问题的建议。先感谢您。


   <?php

        include_once 'includes/dbh.inc.php';


        $sql = "SELECT * FROM gallery ORDER BY orderGallery DESC;";


        $stmt = mysqli_stmt_init($conn);

        if (!mysqli_stmt_prepare($stmt, $sql)) {

          echo "SQL statement failed!";

        } else {


          mysqli_stmt_execute($stmt);

          $result = mysqli_stmt_get_result($stmt);


          while ($row = mysqli_fetch_assoc($result)) {

            echo '<a href="#">

              <div style="background-image: url(img/gallery/'.$row["imgFullNameGallery"].');"></div>

              <h3>'.$row["titleGallery"].'</h3>

              <p>'.$row["descGallery"].'</p>

            </a>';

          }

        }

        ?>


holdtom
浏览 152回答 2
2回答

回首忆惘然

我认为您的mysqlnd驱动程序安装正确?根据手册中的评论:如果您缺少安装/加载的 mysqlnd 或者您没有安装它,您将在尝试调用“mysqli_stmt_get_result()”时获得未定义的引用。最后,这里是一个论坛,讨论与使用驱动程序和 cpanel 相关的信息,您可能会发现这些信息很有用。

绝地无双

函数mysqli_stmt_get_result依赖于仅在使用特定适配器时可用的函数(mysql 本机驱动程序[实际上更好,但一些托管服务提供商不喜欢它的某些功能或只是提供非常旧的 php...] 而不是 libmysqlclient)。最好的选择是从学习开始PDO,但如果你想坚持下去,mysqli我也鼓励使用面向对象的风格——你可以在这里找到一个很好的例子: https ://www.php.net/manual/en/ mysqli-stmt.execute.php但只是为了修复你的文件:0)主要问题(与那个旧的 libmysqlclient)是你需要确切知道你将拥有多少列 - 我看到你想要三个: - imgFullNameGallery - titleGallery - descGallery然后从以下位置修改您的查询:$sql = "SELECT * FROM gallery ORDER BY orderGallery DESC;";至:$sql = "SELECT imgFullNameGallery, titleGallery, descGallery FROM gallery ORDER BY orderGallery DESC;";1)更换线路$result = mysqli_stmt_get_result($stmt);和:mysqli_stmt_bind_result($stmt, $imgFullNameGallery, $titleGallery, $descGallery);现在替换:while ($row = mysqli_fetch_assoc($result)) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; echo '<a href="#">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <div style="background-image: url(img/gallery/'.$row["imgFullNameGallery"].');"></div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <h3>'.$row["titleGallery"].'</h3>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <p>'.$row["descGallery"].'</p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </a>';&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }和:while (mysqli_stmt_fetch($stmt)) {&nbsp; &nbsp; echo '<a href="#">&nbsp; &nbsp; &nbsp; <div style="background-image: url(img/gallery/'.$imgFullNameGallery.');"></div>&nbsp; &nbsp; &nbsp; <h3>'.$titleGallery.'</h3>&nbsp; &nbsp; &nbsp; <p>'.$descGallery.'</p>&nbsp; &nbsp; </a>';}如您所见,每次调用fetch将填充绑定变量$imgFullNameGallery,$titleGallery并$descGallery使用数据库行中它们各自的值。(变量实际上可以以不同的方式命名,这无关紧要,只是它们的计数很重要)同样在下面,如果您不重新使用它,请务必关闭语句:mysqli_stmt_close($stmt);和连接:mysqli_close($link);让我知道这是否对您有帮助。另外:您需要这样做只是因为您的托管服务提供商限制了您的功能。
随时随地看视频慕课网APP
我要回答