mysqli bind_result和fetch

时间:2013-01-17 22:29:25

标签: php mysqli

我为我正在开发的应用程序上的用户创建了一个任意登录系统,我正在使用mysqli从MySQL切换。但是,我遇到了问题,因为无论您输入什么数据,它都会成功登录。显然这是错误的,我认为这与我的fetch语句有关。这是代码:

$sid = /* arbitrary value */
$con = new mysqli($mysql_host,$mysql_user,$mysql_password,$mysql_database);

$stmt = $con->prepare("SELECT uid, pwd FROM schools WHERE uid=?");

$stmt->bind_param("i", $sid);
$stmt->execute();

$stmt->bind_result($schoolid, $password);
$stmt->fetch();

$stmt->close();

有人知道这里发生了什么,并且能够用简单的英语向相关编码新手描述它吗?

编辑:其余的代码对于检查系统来说就像这样。输入的用户ID为$sid,输入和加密的密码为$cleanpwd

if ($sid == $schoolid and $cleanpwd == $password) {
    header('Location: loginsuccess.php');
    }

else {
    header('Location: login.php?error=1'); }

1 个答案:

答案 0 :(得分:0)

似乎如果这是一个登录表单,您首先获取数据然后处理它是否正确?或者您是否正在尝试处理它是否正确(SQL中的用户标识和密码组合)?因为您只需要输入用户标识并获取用户标识和密码,而无需检查输入的密码是否与该用户标识关联的数据库密码匹配。

如果你想查看SQL中的密码和用户名是否匹配,你应该试试这个:

$stmt = $con->prepare("SELECT uid, pwd FROM schools WHERE uid=? AND pass=?");
$stmt->bind_param("is", $sid,$form_password);
$stmt->execute();

否则你需要检查数据是否在以后匹配。

if($_POST['form_pass'] == $password){
//log the user in
}