有人可以解释 - 为什么准备好的陈述更安全:
$stmt = $conn->prepare("INSERT INTO users (user, pass, salt)
VALUES (:user, :pass, :salt");
$stmt->bindParam(":user", $user);
$stmt->bindParam(":pass", $pass);
$stmt->bindParam(":salt", $salt);
$stmt->execute();
首先使用占位符准备插入查询,然后放置值代替占位符,但是 - 那个着名的secure point
?
答案 0 :(得分:1)
值不放置在占位符中(取决于后端,有些做仿真,但不要谈论它们,因为那不是预备语句)。传统SQL的问题是命令和数据是混合。准备好的陈述通过有意识地将它们分开来解决该问题。准备好的陈述不仅仅是一种自动执行mysqli_real_escape_string
的奇特方式。