mysqli bind_param Количество переменных не соответствует количеству параметров в подготовленном выражении - PullRequest
0 голосов
/ 12 декабря 2018

Я новичок в php, и этот вопрос, вероятно, имеет простое решение, но я получаю эту ошибку:

"Предупреждение: mysqli_stmt :: bind_param (): Количество переменных не соответствует числупараметры в подготовленном операторе "

код:

$stmt = $sql->prepare("SELECT name, site, message, `when` FROM messages WHERE message LIKE '%?%'");
$stmt->bind_param('s', $_GET['search']);
$stmt->execute();
$result = $stmt->get_result();

Я пытаюсь получить пользовательский ввод в подготовленное утверждение.

Этот код работает нормально, но не защищен отSQL-инъекции:

$result = $sql->query("SELECT name, site, message, `when` FROM messages WHERE message LIKE '%" . $_GET['search'] . "%'");

1 Ответ

0 голосов
/ 12 декабря 2018

При использовании LIKE в подготовленном операторе это немного отличается.Вы должны добавить % к параметру перед , связывая его с оператором.

Попробуйте что-то вроде ниже:

$param = "%{$_GET['search']}%";
$stmt = $sql->prepare("SELECT name, site, message, `when` FROM messages WHERE message LIKE ?");
$stmt->bind_param('s', $param);
$stmt->execute();
$result = $stmt->get_result();
...