如果我在mySQLi中使用prepare语句,我是否还需要以任何方式转义或检查用户输入。例如,如果我有代码:
$members = new mysqli("localhost", "user", "pass", "members");
$r_email = $_POST['r_email'];
$check = $members->prepare("select user_id from users where email = ?");
$check->bind_param('s', $r_email);
$check->execute();
$check->store_result();
if ($check->num_rows > 0) {
echo "user already registered";
$check->close();
}
$members->close();
我是否需要将$r_email = $_POST['r_email']
更改为$r_email = mysql_real_escape_string($_POST['r_email']);
感谢。
答案 0 :(得分:6)
您不需要使用预准备语句进行转义,但验证用户输入仍然是一个好主意(例如,已填充必填字段,数字字段包含数值等)
答案 1 :(得分:4)
如果您要作为参数传递,则无需转义值。实际上,您不应该这样做,因为您将在文档中插入文字反斜杠。
这些必须是准备时SQL查询的一部分,因此RDBMS可以解析和验证它们。或者在表单上验证用户输入。
始终在SQL语句中放入SQL-Escape数据。永远不要在SQL语句之外使用SQL-Escape数据。
答案 2 :(得分:2)
无需转义输入,但不要吝啬验证,您仍然可能会出现逻辑错误,例如提交空电子邮件,或者其他一些可能会让您感到厌烦的副作用。
始终验证,以后在进行错误测试时保持理智,这是我的座右铭@@。