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)." ");