我一直收到错误PHP致命错误:调用未定义的函数mysqli_stmt_get_result()。我正在使用PHP 5.6版并在我的托管服务提供商c面板中启用了扩展mysqlind,但我无法弄清楚为什么我仍然会收到此错误。我已经研究并发现每次我需要启用mysqli nd才能使用mysqli_stmt_get_result。任何人都可以协助/教导我做错了什么。谢谢。
SIGNUP.PHP:
<?php
session_start();
include '../dbh.php';
$respond = array(
'status' => true,
'message' => 'There was an error',
'redirect',
'errors'
);
if (isset($_POST['submit'])) {
$first = $_POST['first'];
$last = $_POST['last'];
$email = $_POST['email'];
$pwd = $_POST['pwd'];
$errorEmpty = false;
$errorEmail = false;
if (empty($first) || empty($last) || empty($email) || empty($pwd)) {
$respond['errors'][] = "Please fill out all fields!";
$respond['errorEmpty'] = true;
} elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$respond['errors'][] = "Please enter a valid email address!";
$respond['errorEmail'] = true;
} else {
$sql = "SELECT email FROM user WHERE email= ? ";
$stmt = mysqli_prepare($conn, $sql);
mysqli_stmt_bind_param($stmt, 's', $email);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt); //This is where I getting my error
$num_rows = mysqli_num_rows($result);
if ($num_rows > 0) {
$respond['errors'][] = "That email address already exists!";
$respond['errorEmail'] = true;
}
else {
$encryptpwd = password_hash($pwd, PASSWORD_DEFAULT);
$sql = "INSERT INTO user (first, last, email, pwd) VALUES (?,?,?,?)";
$stmt = mysqli_prepare($conn, $sql);
mysqli_stmt_bind_param($stmt, 'ssss', $first, $last, $email, $password_hash);
if (mysqli_stmt_execute($stmt)) {
$userID = mysqli_insert_id($conn);
$status = 1;
$sql2 = "INSERT INTO profileImg (email, status) VALUES(?,?)";
$stmt2 = mysqli_prepare($conn, $sql2);
mysqli_stmt_bind_param($stmt2, 'si', $email);
mysqli_stmt_execute($stmt);
$_SESSION['id'] = $userID;
$respond['redirect'] = "../profile.php?id=$userID";
}
}
}
}
echo json_encode($respond);
?>
答案 0 :(得分:5)
为了防止其他人尖叫,试图弄清楚为什么在启用mysqlnd本机驱动程序后这不起作用。这是因为您需要确保同时启用两个本机驱动器。如果要使用此功能,则需要在服务器上同时启用mysqlnd和nd_mysqli。
否则,仅启用mysqlnd本机驱动程序不包括mysqli_stmt_get_result函数,因为该函数显然位于nd_mysqli本机驱动程序中。不幸的是,大多数文档只谈论mysqlnd本机驱动程序。
一旦启用了两个本机驱动程序,此功能将按文档所述工作。
哦,在我的托管服务器上,您需要禁用/取消选中mysqli才能启用nd_mysqli。
答案 1 :(得分:1)
您是否正确安装了mysqlnd驱动程序?根据{{3}}中的评论:
如果你没有安装/装载任何mysqlnd,你会得到一个 尝试调用&#34; mysqli_stmt_get_result()&#34;时未定义的引用。
最后,这里有一个here讨论有关使用cpanel驱动程序的信息,您可能会发现它很有用。
答案 2 :(得分:1)
您正在使用获取数据的程序方式。
如果可能,您可以使用面向对象的方式,因此无需在服务器上启用nd_mysqli。
$sql = "SELECT * FROM users WHERE id=?"; // SQL with parameters
$stmt = $conn->prepare($sql);
$stmt->bind_param("i", $id);
$stmt->execute();
$result = $stmt->get_result(); // get the mysqli result
$user = $result->fetch_assoc(); // fetch data
答案 3 :(得分:0)
我遇到了同样的问题(“ PHP致命错误:调用未定义的函数mysqli_stmt_get_result()”),它所要做的就是更改服务器的php版本,也将其自动设置为5.6至7.2,并确保nd_mysqli被检查。请注意,mysqlnd是nd-mysqli的替代品。
步骤:
在cpanel中找到更改php版本的部分
选择当前版本为7.2的php的最高版本
确保从扩展列表中检查了nd_mysqli
如果出现任何错误,请尝试取消选中mysqlnd
答案 4 :(得分:0)
只要在服务器上检查数据库表名称是否与您的php代码匹配即可。
在服务器sql admin的右侧,您可以找到此链接。
单击“创建php代码”,然后使用如下所示的确切表名:
$ sql =“ SELECT * FROM'users'WHERE id =?”;
links image
就我而言,代码如下所示:
table name image
$ sql =“ SELECT * FROM'pending_products'WHERE id =?”;