2015-10-08 3 views
0

Я пытаюсь получить параметризованный запрос работает со следующим кодом:PHP Mysqli bind_params не работает

$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 '%?%' 

EDIT:

Наконец получил он работает со следующим кодом:

$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(); 

Спасибо всем за помощь!

+0

Что касается как я знаю, t он не должен быть заключен в кавычки ('' ') –

+0

Вы также связываете' $ search' с инструкцией перед ее инициализацией ... и вам не нужно инициализировать/дезинформировать новую переменную при использовании связанный параметр '$ stmt-> bind_param ('s', $ _GET ['search'])' должен, вероятно, сделать это (если вы никогда не проходите 'search []' как GET var), если вам не нужно что-то вроде '$ search = "% {$ _ GET ['search']}%"; ' – CD001

+0

$stmt->bind_param('s', $_GET['search']) не работал. С помощью скобок вокруг него он работал. –

ответ

2

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

Правильный путь будет обернуть переменную вы связывания с %%:

$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(); 

Похожие вопросы:

+0

Все еще не работает входящий оператор подготовки: SELECT formattributes.id как attr_id, forms.title как form_title, formattributes.label как attr_label, formattributes.description как attr_description FROM formattributes INNER JOIN формы ON forms.id = formattributes.form_id WHERE forms.title LIKE? –

+0

Попробуйте сначала объявить переменную поиска и ее значение, а затем связать ее. –

+0

Не обращайте внимания на то, где скобки вокруг переменной. Посмотрите мое редактирование выше! Большое вам спасибо за помощь! –

-1

изменение код удара.

$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); 
+0

http://php.net/manual/en/pdostatement.bindparam.php –

Смежные вопросы