Из этого кода я получил ошибку.
//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 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);
Других решений пока нет …