PHP 未使用准备好的语句从 mysql 中选择任何值
PHP not selecting any value from mysql using prepared sstatement
我正在对 KDE konquest 游戏进行 php+mysql 重写,添加了很多更改。
目前我刚开始,注册工作(已检查,正在数据库中创建用户,设置 cookie 等)。但是,创建用户后,以下代码不输出用户名:
if(isset($_COOKIE["user_cookie"])){
$sql_update_user_time = 'Select user_name from users WHERE user_cookie=?';
$stmt=mysqli_prepare($mysqli,$sql_update_user_time);
mysqli_stmt_bind_param($stmt,"i",$_COOKIE["user_cookie"]);
mysqli_stmt_bind_result($stmt,$user_name);
var_dump("execute:".mysqli_stmt_execute($stmt)." ");
var_dump("fetch:".mysqli_stmt_fetch()." ");
echo "<h1>Greetings $user_name! The empire's fleet awaits your command. </h1>";
}
相反,这是输出(登录后):
<!DOCTYPE html>
<html>
<head>
<title>
index of php-on-quest.
</title>
</head>
<body>
bool(true)
NULL
<h1>Greetings ! The empire's fleet awaits your command. </h1> </body>
</html>
看了文档,fetch返回NULL表示没有错误,但是没有从数据库中提取数据。
我已经检查过,如果我手动 运行 预期的 sql 查询,它 returns 是预期的,也就是说,只有一个用户名。
最小数据库:
table users:
user_id:int(11) primary key
user_name: char(11)
user_cookie:int(11) unique
一个主要问题是您错过了将 $stmt
传递给 mysqli_stmt_fetch(). This would have thrown an Error (or at least a Warning) which would have told you what the problem is. Please see FrankerZs comment about enabling error_reporting!
结论:
这一行
var_dump("fetch:".mysqli_stmt_fetch()." ");
应该是
var_dump("fetch:".mysqli_stmt_fetch($stmt)." ");
我正在对 KDE konquest 游戏进行 php+mysql 重写,添加了很多更改。
目前我刚开始,注册工作(已检查,正在数据库中创建用户,设置 cookie 等)。但是,创建用户后,以下代码不输出用户名:
if(isset($_COOKIE["user_cookie"])){
$sql_update_user_time = 'Select user_name from users WHERE user_cookie=?';
$stmt=mysqli_prepare($mysqli,$sql_update_user_time);
mysqli_stmt_bind_param($stmt,"i",$_COOKIE["user_cookie"]);
mysqli_stmt_bind_result($stmt,$user_name);
var_dump("execute:".mysqli_stmt_execute($stmt)." ");
var_dump("fetch:".mysqli_stmt_fetch()." ");
echo "<h1>Greetings $user_name! The empire's fleet awaits your command. </h1>";
}
相反,这是输出(登录后):
<!DOCTYPE html>
<html>
<head>
<title>
index of php-on-quest.
</title>
</head>
<body>
bool(true)
NULL
<h1>Greetings ! The empire's fleet awaits your command. </h1> </body>
</html>
看了文档,fetch返回NULL表示没有错误,但是没有从数据库中提取数据。
我已经检查过,如果我手动 运行 预期的 sql 查询,它 returns 是预期的,也就是说,只有一个用户名。
最小数据库:
table users:
user_id:int(11) primary key
user_name: char(11)
user_cookie:int(11) unique
一个主要问题是您错过了将 $stmt
传递给 mysqli_stmt_fetch(). This would have thrown an Error (or at least a Warning) which would have told you what the problem is. Please see FrankerZs comment about enabling error_reporting!
结论:
这一行
var_dump("fetch:".mysqli_stmt_fetch()." ");
应该是
var_dump("fetch:".mysqli_stmt_fetch($stmt)." ");