Подтвердить что ты не робот

Реализовать запрос 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?

4b9b3361

Ответ 1

Вы должны включить знаки % в $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"%', потому что подготовленный оператор цитирует ваши значения внутри уже указанной строки.

Ответ 2

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

LIKE ?

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

Ответ 3

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

Ответ 4

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

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

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

Ответ 5

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

$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)) { ... }