现在我一直在使用以下内容:
$mysqli->prepare("INSERT INTO names VALUES('$name')");
这比使用bind_param / bind_value更不安全,还是无关紧要,准备本身是否安全?
我一直很好奇,我认为使用bind_param / bind_value更安全但我真的不知道。很抱歉,如果这是重复的,因为我实际上找不到任何其他问题(我真的不知道该怎么说这个问题,所以这可能是原因)。
答案 0 :(得分:1)
准备语句的想法是,您将查询字符串提供给数据库,并留有空白。数据库现在可以解释查询字符串并可能对其进行优化。 当您移交输入以填补空白时,数据库不会尝试解释它。它只是将输入放在空白中。
如果将输入放入查询字符串,则数据库无法看到,如果这是输入的一部分或查询sting的一部分,那么数据库可以将输入的部分解释为SQL代码。这称为SQL注入。
所以:用
$mysqli->prepare("INSERT INTO names VALUES('$name')");
你放弃了准备好的陈述可以提供的安全的每一部分。