Php bind_param/bind_值是否使准备好的语句实际上是安全的?
目前,我一直在使用以下内容:Php bind_param/bind_值是否使准备好的语句实际上是安全的?,php,mysqli,prepared-statement,Php,Mysqli,Prepared Statement,目前,我一直在使用以下内容: $mysqli->prepare("INSERT INTO names VALUES('$name')"); 这是否比使用bind_param/bind_值更安全,或者这无关紧要,是prepare本身使其安全 我一直很好奇,我认为使用bind_参数/bind_值更安全,但我真的不知道。很抱歉,如果这是一个重复的问题,因为我实际上找不到任何其他问题(我真的不知道如何表达这个问题,所以这可能就是原因)。准备语句的想法是,将查询字符串提供给数据库,并留有间隙。数据
$mysqli->prepare("INSERT INTO names VALUES('$name')");
这是否比使用bind_param/bind_值更安全,或者这无关紧要,是prepare本身使其安全
我一直很好奇,我认为使用bind_参数/bind_值更安全,但我真的不知道。很抱歉,如果这是一个重复的问题,因为我实际上找不到任何其他问题(我真的不知道如何表达这个问题,所以这可能就是原因)。准备语句的想法是,将查询字符串提供给数据库,并留有间隙。数据库现在可以解释查询字符串,并可能对其进行优化。 当您移交输入以填补空白时,数据库不会尝试对其进行解释。它只是将输入放在间隙中 如果将输入放在查询字符串中,则数据库无法看到(如果这是输入的一部分或查询字符串的一部分),因此数据库可能会将部分输入解释为SQL代码。这称为SQL注入 所以:与
$mysqli->prepare("INSERT INTO names VALUES('$name')");
你失去了一份事先准备好的声明所能提供的所有安全性。我最近刚开始使用MySQLi扩展,所以我对它了解不多,如果bind_param/bind_value更安全,请你解释一下原因,谢谢。这个问题可能已经回答了我的问题,谢谢。