2013-02-14 4 views
2

Надежда Кто-нибудь поможет мне в том, как я привязываю параметр в mysqli, когда подмножество нескольких символов должно быть рядом с значением переменной. Я обнаружил, что он работал для меня при создании SQL заявление, например:PHP привязка подстановочного знака

$sql = "SELECT item_title FROM item WHERE item_title LIKE '%$title%'"; 

Однако я пытался связать переменную следуя той же схеме, и обнаружили, что он потерпел неудачу. Они использовали этот код:

$sql = "SELECT item_title FROM item WHERE item_title LIKE '%?%'"; 

Он поднял эту ошибку:

Warning: mysqli_stmt_bind_param() [function.mysqli-stmt-bind-param]: Number of variables doesn't match number of parameters in prepared statement in program_name on line......

Может кто-нибудь сказать мне, как решить эту проблему? Спасибо.

+0

Попробуйте либо «LIKE?», Либо «bind_param» («%». $ String. «%») 'Или' LIKE '%' || ? || '%' '. – Passerby

ответ

4

Вы можете связывать только литералы данных, а не произвольные части запроса.
Таким образом, подготовить ваш буквальным первые

$var = "%$var%"; 
$sql = "SELECT item_title FROM item WHERE item_title LIKE ?"; 
+0

благодарит за ответ. Я использовал ту же переменную дважды в where where в моем запросе. Например: WHERE (s2.subject_name LIKE '% $ keyword%' ИЛИ ​​c.city_name LIKE '% $ keyword%'). Тогда вы можете сказать мне, как я связываю эти переменные. – TNK

+0

@TharangaNuwan Я обновил ответ в соответствии с вашими комментариями, см. Ниже – Minesh

2

Вы можете сделать как этот путь:

$sql = "SELECT item_title FROM item WHERE item_title LIKE ? "; 

, а затем

$title_new = '%'.$title.'%'; 
mysqli_stmt_bind_param($stmt, 's', $title_new);  

обновляется на основе комментариев пользователя

Для осуществлять бело ж SQL

s2.subject_name LIKE '%$keyword%' OR c.city_name LIKE '%$keyword%' 

Использование ниже Mysqli заявления s2.subject_name НРАВИТСЯ? ИЛИ c.city_name LIKE?

$keyword = '%'.$keyword.'%'; 
mysqli_stmt_bind_param($stmt, 'ss', $keyword, $keyword); 
1
$sql="SELECT item_title FROM item WHERE item_title LIKE concat ('%',?,'%') "; 
0

имеют один знак вопроса за переменной связывания. Например, prepare (SELECT item_title FROM item WHERE item_title LIKE? And name2 like? И ...) Приятная вещь о подготовленных операторах заключается в том, что вам не нужно беспокоиться о цитировании переменных.

Затем свяжите все параметры, такие как bind_param ("ss ...", $ param1, $ param2, ....);

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