Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php bind_param/bind_值是否使准备好的语句实际上是安全的?_Php_Mysqli_Prepared Statement - Fatal编程技术网

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更安全,请你解释一下原因,谢谢。这个问题可能已经回答了我的问题,谢谢。