嗨,
我有以下代码:
$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 编译的。看来你的主人没有这样做。没有什么可做的。
您的选择:
没有太多要学的。
使用 PDO 建立连接后 -