bind_param / bind_value是否使预准备语句实际安全?

时间:2014-08-30 04:57:03

标签: php mysqli prepared-statement

现在我一直在使用以下内容:

$mysqli->prepare("INSERT INTO names VALUES('$name')");

这比使用bind_param / bind_value更不安全,还是无关紧要,准备本身是否安全?

我一直很好奇,我认为使用bind_param / bind_value更安全但我真的不知道。很抱歉,如果这是重复的,因为我实际上找不到任何其他问题(我真的不知道该怎么说这个问题,所以这可能是原因)。

1 个答案:

答案 0 :(得分:1)

准备语句的想法是,您将查询字符串提供给数据库,并留有空白。数据库现在可以解释查询字符串并可能对其进行优化。 当您移交输入以填补空白时,数据库不会尝试解释它。它只是将输入放在空白中。

如果将输入放入查询字符串,则数据库无法看到,如果这是输入的一部分或查询sting的一部分,那么数据库可以将输入的部分解释为SQL代码。这称为SQL注入。

所以:用

$mysqli->prepare("INSERT INTO names VALUES('$name')");

你放弃了准备好的陈述可以提供的安全的每一部分。