【问题标题】:link database and stmt and prepare链接数据库和stmt并准备
【发布时间】:2013-11-29 17:55:38
【问题描述】:

我想写一个mysql php代码 如果我输入 ID 和密码,它将检查数据库 并链接到登录成功或登录失败。 但是我的代码即使 id 和 passwd 正确也无法登录成功

$mysqli = new mysqli('localhost', 'root', '', 'project');

$username = $_POST['username'];
$password = $_POST['password'];

//to check whether the username exists or not
$stmt = $mysqli->stmt_init();

$stmt->prepare("select pid, password from person where pid = '$username' and passwd = '$password'");
$stmt->bind_param('ss', $username, MD5($password));
$stmt->bind_result($result,$result2);
$stmt->execute();
  1. 我不确定我的准备语句和 bind_param 是否在正确的位置。 它应该将 MD5(密码)(加密)密码与输入密码进行比较

**

if  ($stmt->fetch())
{
    session_start();
    $_SESSION['pid'] = $username;//login id
    header('Location: Login Successfully.php');
    exit();
}else{
$_SESSION['pid'] = $username;
header('Location: Failed to login.php');
}

** 这是我的收获。但它总是转到登录失败的.php

这是我在执行上述代码之前的 login.php。它获取输入 id 和 passwd 并将其传递给获取代码。

登录: 在下方输入您的用户名和密码:

Username: <input type="text" name="username" /><br />

Password: <input type="password" name="password" /><br />

<input type="submit" value="Submit" />

【问题讨论】:

  • $stmt-&gt;prepare("select pid, password from person where pid = ? and passwd = ?"); 而不是 $stmt-&gt;prepare("select pid, password from person where pid = '$username' and passwd = '$password'");
  • 它不能解决问题...
  • 哦,我应该改变一些参数..谢谢肖恩
  • @Sean 请留下评论作为答案,以便泡菜可以这样标记。这样它就不会再显示为未回答的问题了

标签: php mysql


【解决方案1】:

使用prepare() 时,需要使用占位符? 而不是实际变量。而且看起来passwd 应该是password。所以你会想要改变

$stmt->prepare("select pid, password from person where pid = '$username' and passwd = '$password'");

$stmt->prepare("select pid, password from person where pid = ? and password = ?");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多