使用mysqli预处理语句从数据库中获取结果

时间:2014-04-04 19:09:52

标签: php mysqli

我尝试使用mysqli预处理语句从数据库中获取结果,我想将它存储在会话中,但是我失败了。我想将id,用户名,密码和邮件存储到会话中。任何人都可以查看我的代码吗?

$kveri = $mysqli->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
$kveri->bind_param('ss', $username, $password);
$kveri->execute();

$kveri->store_result();
$numrows = $kveri->num_rows;

if ( $numrows == 1 )
  {        
     $kveri->bind_result($user_id, $user_username, $user_password, $user_mail);

     while ( $kveri->fetch() )
       {  
         $_SESSION['ulogovan'] = true;
         $_SESSION['username'] = $user_username;
       }

     $kveri->close();

     echo $_SESSION['username'];
  }

2 个答案:

答案 0 :(得分:0)

正如您所看到的,如果按原样使用,mysqli非常不方便。千诀,细微差别和陷阱 为了使数据库交互可行,必须使用某种更高级别的抽象,这将承担所有重复的脏工作。

在这种抽象中,PDO似乎是最常见的:

$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
$stmt->execute([$username, $password]);
$user = $stmt->fetch();
if ($user) {
    $_SESSION['username'] = $user['username'];
}

看 - 当明智地使用时,代码不一定必须具有“战争与和平”的大小

答案 1 :(得分:0)

确保您已启用错误报告,如下所示:

mysqli_report(MYSQLI_REPORT_ALL);

你可能会得到答案。我完美地运行了你的代码,它应该可以工作。

注意,我在开始测试时添加了以下代码(定义了常量但未在此处显示):

$mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASS,DB_NAME);