Подготовленный оператор MySQL с верхней и т.п.

Я начал с:

$check = $db->prepare("SELECT `id`, `name` FROM `this_table` WHERE UPPER(`name`) LIKE ?")or die($db->error);

Который не работает и не возвращает никаких строк. Попытался углубиться в это, и пришел к:

$check = $db->prepare("SELECT `id`, `name` FROM `this_table` WHERE UPPER(`name`) LIKE CONCAT('%', ?, '%')")or die($db->error);

Но радости тоже нет. Опробовал мой параметр как во всех заглушках, так и в штатном корпусе. Нет разницы. Как совместить эти три?

0

Решение

Вам нужно передать LIKE как переменную, заключенную в%:

$val = '%some-value%';
$q = $db->prepare("SELECT id, name FROM this_table WHERE UPPER(name) LIKE ?" );
$q->bindValue( 1, $val );
0

Другие решения

Q: Как совместить эти три?

A: В вашем вопросе недостаточно информации, чтобы узнать, какое поведение вы наблюдаете (подготовка завершается неудачно с сообщением об ошибке, выполняется сбой с сообщением об ошибке, выполнение завершается успешно, но извлечение не возвращает никаких строк или возвращает неожиданные строки. .. мы просто догадываемся

Синтаксис обоих опубликованных вами операторов SQL выглядит правильным. (Из предоставленной информации у нас нет возможности проверить идентификаторы, типы данных, привилегии и т. Д.)

Отметим, что если name столбец определен с учетом сортировки без учета регистра (то есть набор символов, заканчивающийся на _ciи клиентский набор символов нечувствителен к регистру, то использование UPPER() Функция, вероятно, не требуется, но она действительна. (Мы предполагаем, что name столбец определен как столбец VARCHAR, но опять же, это на самом деле просто предположение.

Чтобы быть последовательными, мы ожидаем, что ОБА стороны сравнения LIKE будут заключены в функцию UPPER () …

SELECT t.id
, t.name
FROM `this_table` t
WHERE UPPER(t.name) LIKE UPPER( ? )
^^^^^              ^^^^^

Если вы ожидаете совпадения подстановки, где name значение ‘abcd’ будет соответствовать ‘bc’, тогда вам нужно, чтобы значение, которое вы указали в bindParam, включало бы символы подстановки.

Если значение, которое вы предоставляете, просто 'bc'затем вы можете включить символы подстановки, как показано во втором примере, с CONCAT функциональный и буквальный '%' персонажи.

SELECT t.id
, t.name
FROM `this_table` t
WHERE UPPER(t.name) LIKE CONCAT('%', UPPER( ? ), '%')
^^^^^                          ^^^^^

Кроме того, мы только догадываемся о поведении, которое вы наблюдаете с информацией, которую вы предоставили.

0

По вопросам рекламы [email protected]