为了账号安全,请及时绑定邮箱和手机立即绑定

PHP 警告 mysqli_fetch_assoc()

PHP 警告 mysqli_fetch_assoc()

PHP
holdtom 2022-07-16 18:30:51
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>';          }        }        ?>
查看完整描述

2 回答

?
回首忆惘然

TA贡献1847条经验 获得超11个赞

我认为您的mysqlnd驱动程序安装正确?根据手册中的评论:

如果您缺少安装/加载的 mysqlnd 或者您没有安装它,您将在尝试调用“mysqli_stmt_get_result()”时获得未定义的引用。

最后,这里是一个论坛,讨论与使用驱动程序和 cpanel 相关的信息,您可能会发现这些信息很有用。


查看完整回答
反对 回复 2022-07-16
?
绝地无双

TA贡献1946条经验 获得超4个赞

函数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)) {

            echo '<a href="#">

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

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

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

            </a>';

          }

和:


while (mysqli_stmt_fetch($stmt)) {

    echo '<a href="#">

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

      <h3>'.$titleGallery.'</h3>

      <p>'.$descGallery.'</p>

    </a>';

}

如您所见,每次调用fetch将填充绑定变量$imgFullNameGallery,$titleGallery并$descGallery使用数据库行中它们各自的值。(变量实际上可以以不同的方式命名,这无关紧要,只是它们的计数很重要)


同样在下面,如果您不重新使用它,请务必关闭语句:


mysqli_stmt_close($stmt);

和连接:


mysqli_close($link);

让我知道这是否对您有帮助。另外:您需要这样做只是因为您的托管服务提供商限制了您的功能。


查看完整回答
反对 回复 2022-07-16
  • 2 回答
  • 0 关注
  • 151 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信