• Get_result() 在 php7.4 中工作,但在 php8 中出现错误“调用未定义方法 mysqli_stmt::get_result()”


    嗨,
    我有以下代码:

     
    

    $stmt=$dbc->prepare("SELECT user_id, first_name, last_name, pass FROM users WHERE email=? ") ; $stmt->bind_param('s', $e); $stmt->execute(); if ($stmt->error){echo "something has gone wrong";} $r=$stmt->get_result(); $row = mysqli_fetch_array ( $r, MYSQLI_ASSOC ) ;

    作为登录脚本的一部分。在 PHP7.4 中运行它没有问题。但是,如果我将 PHP 版本更改为 8,则脚本会停止并出现错误

     
    

    Call to undefined method mysqli_stmt::get_result()

    指线

     
    

    $r=$stmt->get_result();

    我已经通过 PHP 语法检查器运行了代码,它没有显示任何错误。https://www.php.net/manual/en/mysqli-stmt.get-result 14显示该方法同时在 PHP7 和 PHP8 中。

    那么我在这里错过了什么?感激地收到任何帮助/想法/指针 - 谢谢。如果您需要我发布更多代码,请告诉我。

    尝试在页面开头添加以下内容,希望会显示更多错误信息:

     
    

    declare(strict_types=1); error_reporting(-1); ini_set(‘display_errors’, ‘true’);

    编辑:

    同样来自在线 PHP 手册,函数名称似乎已更改:

    $result = mysqli_stmt_get_result($stmt);

    https://www.php.net/manual/en/mysqli-stmt.get-result.php 18

    get_result 仅在 php 实际使用 msyqlnd 驱动程序连接数据库服务器时可用。这需要构建 php 以将 msyqlnd 驱动程序与 MySql 数据库扩展一起使用,并且 mysqlnd 驱动程序已启用并正常工作。如果不满足这些条件,mysqli 的 get_result、fetch_all 之类的东西就不存在,也不会起作用。

    这将是切换更简单、更一致的 PDO 扩展的好时机。它没有像这样的gotya。您还希望切换到使用异常处理错误,并在建立数据库连接时将默认获取模式设置为 assoc。

    使用 PDO,发布的代码将简单地变为 -

     
     
    // note: building your sql query in a php variable aids debugging and reduces typing errors by separating the sql syntax from the php syntax as much as possible $sql = "SELECT user_id, first_name, last_name, pass FROM users WHERE email=?"; $stmt=$pdo->prepare($sql); $stmt->execute([$e]); $row = $stmt->fetch();

    PHP8 也支持它,如果它是使用 mysqlnd 编译的。看来你的主人没有这样做。没有什么可做的。

    您的选择:

    • 要求您的主机使用 mysqlnd 重新编译 PHP8
    • 切换到不同的主机
    • 切换到 PDO 而不是 MySQLi

    没有太多要学的。

    使用 PDO 建立连接后 -

    1. 使用 ? 准备好的查询占位符是相同的。
    2. 调用 ->prepare() 方法是一样的。
    3. 您无需显式使用 mysqli 的 bind_param() 方法,而是将输入值数组提供给 ->execute([…]) 调用。
    4. 如果您使用最后一个插入 ID 或受影响的行数,则有等效的 PDO 调用。
    5. 对于准备好的和未准备好的 SELECT 查询,您可以使用 ->fetch() 方法(一行)、->fetchAll() 方法(所有行)或偶尔使用 ->fetchColumn() 方法直接获取数据(一行中的特定列。)
    6. 将数据提取到 php 变量后,使用该数据的其余代码应保持不变。如果您还没有使用这种设计模式,它将您的数据库特定代码与您的演示代码分开,这将是进行此更改的好时机,因此如果您需要再次更改数据库特定代码,您将不会需要触摸您的演示代码。
  • 相关阅读:
    实时云渲染与直播应用场景结合技术探索
    .net餐厅管理系统数据层餐厅服务类修改、查询菜品信息
    Netflix SpringCloud-feign & zuul
    JavaScript的基本数据类型如何使用?
    Repo简介
    家居行业如何借助AI营销数智化转型?《2023 家居行业AI营销第一课(重庆站)》给你答案
    敏捷开发-任务拆解、工作量评估和任务指派
    OpenGL 纹理详解
    【硬件架构的艺术】学习笔记(2)同步和复位
    记一次搭建conda虚拟环境
  • 原文地址:https://blog.csdn.net/allway2/article/details/126869498