打印已准备语句php的结果(mysqli::num_行设置不正确)
我最近更新了正常的声明打印已准备语句php的结果(mysqli::num_行设置不正确),php,mysqli,Php,Mysqli,我最近更新了正常的声明 $result = mysql_query("SELECT user_id from users WHERE user_id = '$user_id'"); 准备好的声明(安全) 我学习了一些教程,但这仍然不起作用: public function isUserRegistered($user_id) { print $user_id; $stmt = $this->conn->prepare("SELECT user_id
$result = mysql_query("SELECT user_id from users WHERE user_id = '$user_id'");
准备好的声明(安全)
我学习了一些教程,但这仍然不起作用:
public function isUserRegistered($user_id) {
print $user_id;
$stmt = $this->conn->prepare("SELECT user_id FROM users WHERE user_id = ?");
$stmt->bind_param("s", $user_id);
if ($stmt->execute()) {
$stmt->bind_result($user_id);
$stmt->fetch();
$no_of_rows = $stmt->num_rows;
print $no_of_rows;
$stmt -> close();
if ($no_of_rows > 0) {
print "Finally";
// user already registered
return true;
} else {
print "Stupid";
// user is not registered
return false;
}
}
}
提供的id存在,因为我可以在正在打印的控制台中看到它。正在执行if($stmt->execute())
,但由于某些原因,没有返回任何内容
如何解决此问题以及如何打印结果
我也试过:
while ($stmt->fetch()) {
printf ("%s (%s)\n", $user_id);
}
大多数教程都是由知识不比你强的人编写的。在代码中使用num_rows()肯定是这样一个教程的标志 事实上,在PHP中,您永远不需要这样的函数 以您的代码为例已经有一个变量可以告诉用户是否已注册——一个选定的用户id。您可以从函数返回该id。或者你可以用一个像这样的常量
public function isUserRegistered($user_id)
{
$sql = "SELECT 1 FROM users WHERE user_id = ?";
$stmt = $this->conn->prepare($sql);
$stmt->bind_param("s", $user_id);
$stmt->execute();
$stmt->bind_result($found);
$stmt->fetch();
return $found;
}
大多数教程都是由知识不比你强的人编写的。在代码中使用num_rows()肯定是这样一个教程的标志 事实上,在PHP中,您永远不需要这样的函数 以您的代码为例已经有一个变量可以告诉用户是否已注册——一个选定的用户id。您可以从函数返回该id。或者你可以用一个像这样的常量
public function isUserRegistered($user_id)
{
$sql = "SELECT 1 FROM users WHERE user_id = ?";
$stmt = $this->conn->prepare($sql);
$stmt->bind_param("s", $user_id);
$stmt->execute();
$stmt->bind_result($found);
$stmt->fetch();
return $found;
}
问题是除非您首先存储结果,否则
$stmt->num_rows
无效,如下所述:
获取
工作正常并按预期返回数据行。唉,mun_rows
属性为零,因此isuserregisted
方法失败。即使它返回了正确的数据
注意:更改为实际检查从获取的返回值
结论:
- 使用
确保$stmt->store_result()
有用$stmt->num_rows
- 使用实际返回的数据来确保它返回了您期望的数据
isUserRegistered
我使用的代码:
代码:
var_dump语句的输出:
注意:store\u结果
语句
12321
string 'UserRegister::isUserRegistered' (length=30)
string 'input user id: 12321' (length=20)
string 'found user id: 12321' (length=20)
string 'reported number of rows: 1' (length=26)
string 'K:\developer\testmysql\index4.php78' (length=35)
Finally
string 'isUserRegistered :
注释掉“store_result”语句,该语句给出:
12321
string 'UserRegister::isUserRegistered' (length=30)
string 'input user id: 12321' (length=20)
string 'found user id: 12321' (length=20)
string 'reported number of rows: 0' (length=26)
string 'K:\developer\testmysql\index4.php79' (length=35)
Finally
string 'isUserRegistered : true
注意:报告的行数为零。问题是除非您首先存储结果,否则
$stmt->num_rows
无效,如下所述:
获取
工作正常并按预期返回数据行。唉,mun_rows
属性为零,因此isuserregisted
方法失败。即使它返回了正确的数据
注意:更改为实际检查从获取的返回值
结论:
- 使用
确保$stmt->store_result()
有用$stmt->num_rows
- 使用实际返回的数据来确保它返回了您期望的数据
isUserRegistered
我使用的代码:
代码:
var_dump语句的输出:
注意:store\u结果
语句
12321
string 'UserRegister::isUserRegistered' (length=30)
string 'input user id: 12321' (length=20)
string 'found user id: 12321' (length=20)
string 'reported number of rows: 1' (length=26)
string 'K:\developer\testmysql\index4.php78' (length=35)
Finally
string 'isUserRegistered :
注释掉“store_result”语句,该语句给出:
12321
string 'UserRegister::isUserRegistered' (length=30)
string 'input user id: 12321' (length=20)
string 'found user id: 12321' (length=20)
string 'reported number of rows: 0' (length=26)
string 'K:\developer\testmysql\index4.php79' (length=35)
Finally
string 'isUserRegistered : true
注意:报告的行数为零。您是否收到任何错误?您是否尝试手动执行同一查询并返回任何结果?是的,它确实返回一行。不,我没有发现任何错误。你能把错误检查添加到你的问题中吗?也许你做错了。我是php新手。你这是什么意思?我正在使用postman,我可以在控制台中看到它正在打印id、0行和愚蠢的
123210愚蠢的只需添加您如何检查代码中的查询错误。很明显,如果出现错误,它将返回0行。您是否收到任何错误?您是否尝试手动执行同一查询并返回任何结果?是的,它确实返回一行。不,我没有发现任何错误。你能把错误检查添加到你的问题中吗?也许你做错了。我是php新手。你这是什么意思?我正在使用postman,我可以在控制台中看到它正在打印id、0行和愚蠢的123210愚蠢的只需添加您如何检查代码中的查询错误。很明显,如果出现错误,它将返回0行。谢谢,我现在将修改它。是否可以使用打印结果的打印语句进行更新?在名为isUserRegistered()的函数中不应包含任何打印语句。你必须在一个条件下使用这个函数,你可以在这个条件下打印一些东西。我以后不会使用它,我只需要在控制台中查看是否返回了正确的东西。就像我在函数中打印“Finally”一样,我试图打印返回的值,但仍然一无所获。我想指定这个从user\u id='12321'
工作的用户中选择user\u id。我的已经是这样了,我仍然无法打印返回的任何内容。谢谢,我现在就修改它。是否可以使用打印结果的打印语句进行更新?在名为isUserRegistered()的函数中不应包含任何打印语句。你必须在一个条件下使用这个函数,你可以在这个条件下打印一些东西。我以后不会使用它,我只需要在控制台中查看是否返回了正确的东西。就像我在函数中打印“Finally”一样,我试图打印返回的值,但仍然一无所获。我想指定这个从user\u id='12321'
有效的用户中选择user\u id。我的已经是这样了,我仍然无法打印返回的任何内容。@BogdanDaniel,谢谢。对于那些不熟悉mysqli
的人来说,很难找到故障。结果很有趣,问题是$stmt-