Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.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 什么时候需要将参数绑定到MySQLi?_Php_Mysql_Security_Mysqli_Prepared Statement - Fatal编程技术网

Php 什么时候需要将参数绑定到MySQLi?

Php 什么时候需要将参数绑定到MySQLi?,php,mysql,security,mysqli,prepared-statement,Php,Mysql,Security,Mysqli,Prepared Statement,从这段代码中我收到了一个错误 //Prepare insert statement. if($InsertEventQuery = $mysqli->prepare("INSERT into events(eventname, eventdesc, eventmonth, eventdate, eventyear, eventstart, eventend) VALUES ('$EventName','$EventDesc','$EventMonth','$EventDate','$Eve

从这段代码中我收到了一个错误

//Prepare insert statement.
if($InsertEventQuery = $mysqli->prepare("INSERT into events(eventname, eventdesc, eventmonth, eventdate, eventyear, eventstart, eventend) VALUES ('$EventName','$EventDesc','$EventMonth','$EventDate','$EventYear','$EventStart','$EventEnd')"))
{
    //Bind parameters of insert statement.
    $InsertEventQuery->bind_param('ssiiiii', $EventName, $EventDesc, $EventMonth, $EventDate, $EventYear, $EventStart, $EventEnd);
这就是错误:

警告:mysqli_stmt::bind_param():变量数量与[…]中准备语句中的参数数量不匹配

我查看了它,因为错误似乎不正确,并发现:

在这种情况下,不需要绑定参数。占位符用于INSERT语句或WHERE子句中的值。(请注意,标识符不允许使用占位符,例如语句中的列名。)


这让我感到困惑,我现在想知道,为了安全起见,什么时候需要绑定参数,什么时候需要使用占位符。

绑定参数在任何INSERT语句中都是一个好主意,因为它可以防止SQL注入,还可以免费清理字符串

我通常会在prepare语句中使用问号,如下所示:

//Prepare insert statement.
if ($InsertEventQuery = $mysqli->prepare("INSERT into events(eventname, eventdesc, eventmonth, eventdate, eventyear, eventstart, eventend) VALUES (?, ?, ?, ?, ?, ?, ?)"))
{
    //Bind parameters of insert statement.
    $InsertEventQuery->bind_param('ssiiiii', $EventName, $EventDesc, $EventMonth, $EventDate, $EventYear, $EventStart, $EventEnd);

嗯,好的。现在我看到在prepare()语句和bind_param()语句中放置变量名是多余的,但我不明白为什么需要问号。实际上,这是从文档中得到的:通过嵌入问号(?),此参数可以在SQL语句中包含一个或多个参数标记字符在适当的位置。[嗯,我不太明白,但现在可以用了。非常感谢!