什么时候需要用MySQLi绑定参数?

时间:2014-10-08 05:32:19

标签: php mysql mysqli sqlbindparameter

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

    //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():变量数量与[...]”

中预准备语句中的参数数量不匹配

我调查了它,因为错误似乎不正确并找到了:

PHP Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement

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

这使我感到困惑,我现在想知道安全性,何时需要绑定参数以及何时需要使用占位符。

谢谢!

1 个答案:

答案 0 :(得分:0)

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

我通常在准备语句中使用问号来使用它:


    //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);