警告 :: 无效的对象或资源 mysqli_stmt.含义和解决方案是什么?
以下代码抛出了神秘的警告.我无法理解他们的意思.这些错误表明什么以及如何消除它们?
The following code is throwing the mysterious Warnings. I can't understand what they mean. What do these errors indicate and how to eradicate them?
require "conn.php";
$q = mysqli_stmt_init($dbconn);
$query = "SELECT users.userid FROM users WHERE users.email = ? ";
mysqli_stmt_prepare($q, $query);
mysqli_stmt_bind_param($q, "s", $email);
mysqli_stmt_execute($q);
$result = mysqli_stmt_get_result($q);
if (mysqli_num_rows($result) == 0) {
$q = mysqli_stmt_init($dbconn);
$query = "INSERT INTO users ( users.first_name, users.last_name, users.mobile_no, users.email, users.password, users.reg_date)
VALUES (? ,? ,? ,? ,? ,NOW() )";
mysqli_stmt_prepare($q, $query);
mysqli_stmt_bind_param($q, "sssss", $first_name, $last_name, $mobile_number, $email, $password);
mysqli_stmt_execute($q);
if (mysqli_stmt_affected_rows($q) == 1) {
echo "data inserted <br>";
foreach ($_POST as $key => $val) {
echo "$key - - - > $val <br>";
}
}
} else {
echo "email is already registered";
}
每当我运行此代码块时都会出现以下警告
whenever I run this block of code following warnings occur
Warning: mysqli_stmt_bind_param(): invalid object or resource mysqli_stmt in /storage/emulated/0/htdocs/registration_process.php on line 66
Warning: mysqli_stmt_execute(): invalid object or resource mysqli_stmt in /storage/emulated/0/htdocs/registration_process.php on line 67
Warning: mysqli_stmt_get_result(): invalid object or resource mysqli_stmt in /storage/emulated/0/htdocs/registration_process.php on line 68
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, null given in /storage/emulated/0/htdocs/registration_process.php on line 70
推荐答案
这里的问题很奇怪.这听起来无关,但此错误消息是不可靠的语法变体的结果.
The problem here is quite peculiar. It sounds unrelated but this error message is the result of unreliable syntax variant.
与对象语法相比,过程 mysqli 语法不仅过于冗长,而且具有欺骗性,引发错误不是在真正发生时,而是在已经太晚的时候,更不用说此错误消息的神秘性了.
Procedural mysqli syntax is not only excessively verbose as compared to object syntax, but also deceptive, raising an error not when it really occurs, but when it's already too late, not to mention the cryptic nature of this error message.
您的查询存在一些问题,您需要获取真正的错误消息来自 MySQL,如本 answer 但为了实现它,您必须更改语法.
There is some problem with your query and you need to get the real error message from MySQL as explained in this answer but in order to implement it you have to change the syntax.
外卖:解决您的问题
- 按照我的文章conn.php> 设置正确的连接设置
将你的程序 mysqli 重写为对象语法,例如
- rewrite your
conn.php
as shown in this my article to set the proper connection settings rewrite your procedural mysqli to object syntax, such as
$query = "SELECT userid FROM users WHERE email = ?";
$stmt = $dbconn->prepare($query);
$stmt->bind_param("s", $email);
$stmt->execute();
$result = $stmt->get_result();
获取真正的错误信息
在那之后,您将能够解决问题.
and after that you'll be able to fix the issue.
相关文章