关于使用预处理防止sql注入的问题。

header("Content-type:text/html charset=utf8");
$mysqli=new mysqli('localhost','root','***','test');
if($mysqli->connect_errno){
   die("Connect Error:".$mysqli->connect_error);
}
$mysqli->set_charset('utf8');
$username=$_POST['username'];
$password=md5($_POST['password']);

$sql="SELECT * FROM t1 WHERE username=? AND password=?";
$mysqli_stmt=$mysqli->prepare($sql);

$mysqli_stmt->bind_param('ss',$username,$password);
if($mysqli_stmt->execute()) {
   $mysqli_stmt->store_result();
   if($mysqli_stmt->num_rows>0){
       echo "登陆成功";
   }else{
       echo "登陆失败";
   }

}

如以上代码,为什么给password加上md5数据库就获取密码失败并且登录失败,而把md5去掉并且不使用md5加密passwrod就可以登陆成功,这是为什么?


紫宸丶
浏览 1955回答 2
2回答

lynhao

因为你加密后你的密码已经变成加密后的样子,要加密的话你就在数据库创表时的字段也给它用md5加密,保持一致

慕冬雪

楼上说的对,因为你数据库中的值并没有加密,但是你程序中向数据库请求时加密了密码,这样当然找不到,建议注册的时候就向数据库中存入加密后的密码
打开App,查看更多内容
随时随地看视频慕课网APP