问答详情
源自:3-3 MySQLi中使用预处理语句防止SQL注入

$mysqli_stmt->bind_param('ss',$username,$password);之后改变了什么

$mysqli_stmt->bind_param('ss',$username,$password);

之后是改变了什么东西?  还是需要再$mysqli_stmt->execute();才有改变什么

这时候输出$sql还是跟原来一样, echo $mysqli_stmt显示错误

请就用$username='or 1=1#' 为例,告诉我 上面操作之后改变了什么

提问者:坚持MyDream 2016-12-08 14:50

个回答

  • Lydiar3308665
    2017-06-15 15:35:05
    已采纳

    相当于将?当做一个x来执行了语句,后面的绑定参数操作,然后执行操作之后,不再是用原来的句子查询一遍,而是将编译好的语句,带入特定参数,执行时将‘or 1=1 #当做一个字符串实参代入,而不是拼接成完整sql语句再去执行。。。。。。 

  • 坚持MyDream
    2016-12-08 15:12:31

    如果有一账户的用户名和密码分别为      __dog     密码:    123;

    是不是因为bind_param('ss',$username,$password);         账户名含有 "__" 因而不进行查询