Я пытаюсь получить параметризованный запрос, работающий со следующим кодом:
$stmt = $mysqli->prepare("SELECT formattributes.id as attr_id, forms.title as form_title, formattributes.label as attr_label, formattributes.description as attr_description FROM formattributes
INNER JOIN forms ON forms.id = formattributes.form_id WHERE forms.title LIKE '%?%'");
$stmt->bind_param('s', $search);
$search = $_GET['search'];
$stmt->execute();
$result = $stmt->get_result();
Однако после выполнения запроса я проверил свою таблицу general_log в моей базе данных mysql, и запрос просто не изменился:
SELECT formattributes.id as attr_id, forms.title as form_title, formattributes.label as attr_label, formattributes.description as attr_description FROM formattributes
INNER JOIN forms ON forms.id = formattributes.form_id WHERE forms.title LIKE '%?%'
РЕДАКТИРОВАТЬ:
Наконец-то он работает со следующим кодом:
$param = "%{$_POST['search']}%";
$stmt = $mysqli->prepare("SELECT formattributes.id as attr_id, forms.title as form_title, formattributes.label as attr_label, formattributes.description as attr_description FROM formattributes
INNER JOIN forms ON forms.id = formattributes.form_id WHERE forms.title LIKE ?");
$stmt->bind_param('s', $param);
$stmt->execute();
$result = $stmt->get_result();
Спасибо всем за помощь!
Так как вы положили заполнитель, завернутый с '
, он представлял угрозу как обычную строку, а не как заполнитель.
Правильный способ — обернуть переменную, с которой вы связываете %%
:
$stmt = $mysqli->prepare("SELECT formattributes.id as attr_id, forms.title as form_title, formattributes.label as attr_label, formattributes.description as attr_description FROM formattributes
INNER JOIN forms ON forms.id = formattributes.form_id WHERE forms.title LIKE ?");
$stmt->bind_param('s', $search);
$search = '%'.$_GET['search'].'%';
$stmt->execute();
$result = $stmt->get_result();
Похожие вопросы:
изменить код удара.
$stmt->bind_param(':s', $search);
ИЛИ ЖЕ
SELECT formattributes.id as attr_id, forms.title as form_title, formattributes.label as attr_label, formattributes.description as attr_description FROM formattributes
INNER JOIN forms ON forms.id = formattributes.form_id WHERE forms.title LIKE '%:s%'
$stmt->bind_param(':s', $search);