У меня проблемы с реализацией 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)) { ... }