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语句中包含一个或多个参数标记字符在适当的位置。[嗯,我不太明白,但现在可以用了。非常感谢!