当我使用预准备语句时,我是否必须使用mysqli_real_escape_string
等函数或自动执行?
例如我应该使用这个
$stmt = $mysqli->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
$stmt->bindParam('sd', $name, $value);
或者我必须使用这样的东西
$stmt = $mysqli->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
$stmt->bindParam('sd', mysqli_real_escape_string($name), mysqli_real_escape_string($value));
建议使用哪些函数来避免sql注入?
答案 0 :(得分:3)
不,您不需要转义参数。事实上,转移到参数化查询中的变量是一个错误,会给你不正确的结果。
答案 1 :(得分:2)
使用参数化查询时,转义由API完成。你的第一种方法是正确的。
如果您正在进行原始文本查询,那么您应该转义参数值。
答案 2 :(得分:1)
预备语句会自动清除您要插入的内容。执行以下操作时:
$stmt = $mysqli->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);
bindParam函数正在为您执行所有必要的清理工作,然后将该值插入查询字符串。
有趣的事实,准备好的陈述是建立在他们基本想法的黑客之上的黑客:)