对 Ajax 登录系统使用准备好的语句时遇到问题
Having Issue on Using Prepared Statement For Ajax Login System
我在使用以下 Ajax 和 MySQLi Prepared Statement
获取登录结果时遇到问题
var login = $.ajax({
type: "POST",
url : "assets/app/users.php",
cache: false,
data: data,
beforeSend: function() {
console.log(data);
},
success: function() {}
});
login.done(function(html) {
if(html=='true'){
window.location.replace('app.php');
}
else {
$("#loginRequest").before('<div class="alert alert-danger err" role="alert">Email or Password Is Not Correct</div>');
}
});
这是服务器端的 PHP 我 hvae
$email = $_POST['email'];
$pass = $_POST['pass'];
$conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_DATABASE);
$sql = "SELECT id, email, fname, lname, type FROM users WHERE `email`=? AND `pass`=?";
$stmt = $conn->prepare($sql);
$stmt->bind_param('ss', $email,$pass);
$stmt->execute();
$stmt->bind_result($theId,$theEmail,$theFName,$theLname,$theType);
if($stmt->num_rows > 0){
$stmt->fetch();
echo 'true';
$_SESSION['LOGIN_STATUS'] = true;
$_SESSION['fname'] = $theFName;
}
else{
echo 'false';
}
我正在将数据正确地发送到服务器,因为我已经在 beforeSend(){}
和 $_POST['email'];
上测试了它,这两个 return 都埋藏了值。我还使用正常运行的相同 SQL 查询测试了数据库,但我在控制台中得到 false
有效和无效凭据!
我认为你需要调用 $stmt->store_result()
才能使用 $stmt->num_rows
。
或者,您可以只调用 $stmt->fetch()
并测试其结果。它 returns true
当有一行可用时,null
当它到达结果末尾时。
if ($stmt->fetch()) {
echo 'true';
$_SESSION['LOGIN_STATUS'] = true;
$_SESSION['fname'] = $theFName;
} else {
echo 'false';
}
我在使用以下 Ajax 和 MySQLi Prepared Statement
获取登录结果时遇到问题var login = $.ajax({
type: "POST",
url : "assets/app/users.php",
cache: false,
data: data,
beforeSend: function() {
console.log(data);
},
success: function() {}
});
login.done(function(html) {
if(html=='true'){
window.location.replace('app.php');
}
else {
$("#loginRequest").before('<div class="alert alert-danger err" role="alert">Email or Password Is Not Correct</div>');
}
});
这是服务器端的 PHP 我 hvae
$email = $_POST['email'];
$pass = $_POST['pass'];
$conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_DATABASE);
$sql = "SELECT id, email, fname, lname, type FROM users WHERE `email`=? AND `pass`=?";
$stmt = $conn->prepare($sql);
$stmt->bind_param('ss', $email,$pass);
$stmt->execute();
$stmt->bind_result($theId,$theEmail,$theFName,$theLname,$theType);
if($stmt->num_rows > 0){
$stmt->fetch();
echo 'true';
$_SESSION['LOGIN_STATUS'] = true;
$_SESSION['fname'] = $theFName;
}
else{
echo 'false';
}
我正在将数据正确地发送到服务器,因为我已经在 beforeSend(){}
和 $_POST['email'];
上测试了它,这两个 return 都埋藏了值。我还使用正常运行的相同 SQL 查询测试了数据库,但我在控制台中得到 false
有效和无效凭据!
我认为你需要调用 $stmt->store_result()
才能使用 $stmt->num_rows
。
或者,您可以只调用 $stmt->fetch()
并测试其结果。它 returns true
当有一行可用时,null
当它到达结果末尾时。
if ($stmt->fetch()) {
echo 'true';
$_SESSION['LOGIN_STATUS'] = true;
$_SESSION['fname'] = $theFName;
} else {
echo 'false';
}