Php MySql Select count与准备好的语句返回始终为1
我正在使用此方法获取并创建登录Web服务:Php MySql Select count与准备好的语句返回始终为1,php,mysql,sql,Php,Mysql,Sql,我正在使用此方法获取并创建登录Web服务: 问题是$gNumb始终返回1,即使sql表不包含用户名和密码。知道问题出在哪里吗?您忘了获取结果: ... $stmt->bind_param('ss', $user, $pass); if ($stmt->execute()) { $stmt->bind_result($gNumb); $stmt->fetch(); } else { $gNumb = 0; } ... 你为什么认
问题是$gNumb始终返回1,即使sql表不包含用户名和密码。知道问题出在哪里吗?您忘了获取结果:
...
$stmt->bind_param('ss', $user, $pass);
if ($stmt->execute()) {
$stmt->bind_result($gNumb);
$stmt->fetch();
} else {
$gNumb = 0;
}
...
你为什么认为这是个问题?如果查询成功,gNumb为TRUE;如果有错误,gNumb为FALSE。计数0不是错误。您需要使用fetch获取包含该计数的行。您不应该存储纯文本密码-了解$result的用途吗?你分配它,但从不使用它。就像@NigelRen说的,最好是使用密码\u散列和密码\u验证,它还可以防止定时攻击。。运行用户名=?密码=?在SQL中,如果密码列也在B树索引中,则SQL可能容易受到定时攻击,因为该算法的时间复杂度几乎是线性的,我认为它可能容易受到定时攻击。。所以我做了一些改变密码散列长度的测试,我注意到散列越像密码散列,MySQL需要更长的时间来执行大部分非运行,所以我认为我的陈述可能是正确的。
...
$stmt->bind_param('ss', $user, $pass);
if ($stmt->execute()) {
$stmt->bind_result($gNumb);
$stmt->fetch();
} else {
$gNumb = 0;
}
...