реализовать запрос LIKE в PDO

У меня проблемы с реализацией LIKE в PDO

У меня есть этот запрос:

$query = "SELECT * FROM tbl WHERE address LIKE '%?%' OR address LIKE '%?%'"; $params = array($var1, $var2); $stmt = $handle->prepare($query); $stmt->execute($params); 

Я проверил $var1 и $var2 они содержат как слова, которые я хочу найти, так и мои PDO работают нормально, так как некоторые из моих запросов SELECT INSERT работают, просто я не знаком с LIKE здесь в PDO.

Результат не возвращается. Является ли синтаксически правильным $query my $query ?

Вы должны включить знаки % в $params , а не в запрос:

 $query = "SELECT * FROM tbl WHERE address LIKE ? OR address LIKE ?"; $params = array("%$var1%", "%$var2%"); $stmt = $handle->prepare($query); $stmt->execute($params); 

Если вы посмотрите на сгенерированный запрос в своем предыдущем коде, вы увидите что-то вроде SELECT * FROM tbl WHERE address LIKE '%"foo"%' OR address LIKE '%"bar"%' , потому что подготовленный оператор цитируя ваши значения внутри уже указанной строки.

Нет, вам не нужно указывать готовые заполнители. Кроме того, включите% меток внутри ваших переменных.

 LIKE ? 

И в переменной: %string%

 $query = "SELECT * FROM tbl WHERE address LIKE ? OR address LIKE ?"; $params = array("%$var1%", "%$var2%"); $stmt = $handle->prepare($query); $stmt->execute($params); 

Ниже приведен пример

 $title = 'PHP%'; $author = 'Bobi%'; // query $sql = "SELECT * FROM books WHERE title like ? AND author like ? "; $q = $conn->prepare($sql); $q->execute(array($title,$author)); 

Надеюсь, он сработает.

Просто используйте следующее:

 $query = "SELECT * FROM tbl WHERE address LIKE CONCAT('%', :var1, '%') OR address LIKE CONCAT('%', :var2, '%')"; $ar_val = array(':var1'=>$var1, ':var2'=>$var2); if($sqlprep->execute($ar_val)) { ... }