как предотвратить преобразование% (числа) в код

У меня есть эта строка в PHP, которая строит параметр запроса в PDO:

$p[':criteria'] = '%' . $search . '%';

Рассматриваемая строка MySQL выглядит так:

d.d_name LIKE :criteria

Проблема в том, что если я вставлю число в $ search, оно преобразует его в символ. Например, если я установлю $ search в:

6008

Я хочу, чтобы это было:

%6008%

но то, что я получаю, это:

`08%

Похоже, что он% -кодирует первые 2 символа. Я пытался использовать urldecode (), чтобы вернуть его, но это не сработало. Он сохранил строку как `08%.

Как я могу предотвратить это?

-2

Решение

Механизм привязки слишком общий, потому что он имеет дело со многими типами, и есть некоторые крайние случаи, подобные этому.

Так что в этом случае, вместо использования bind, смонтируйте ваш запрос в виде строки:

$sql = "...whatever d.d_name LIKE '%" . $search . "%'";

Отладка $ search, чтобы убедиться, что в ней нет кавычек или чего-либо еще перед объединением. Если у него есть с отделкой или что-то в этом роде.

Также не забудьте проверить правильность $ search из-за SQL-инъекций.

0

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

Это просто иллюзия. Вы пытаетесь просмотреть свой запрос, используя неподходящий инструмент, например браузер. И этот инструмент делает некоторые преобразования. Абсолютно не имеет отношения к SQL-материалу.

В то время как для базы данных ваш запрос остается точно таким же. И нет ни одной проблемы с любыми конверсиями. Просто запустите ваш запрос и получите результат.

0

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

-1

Попробуйте использовать подготовленное утверждение, как показано ниже.

$sth = $dbh->prepare("SELECT *
FROM `test`
WHERE `criteria` LIKE :criteria");
$sth->bindParam(':criteria', '%'.$search.'%');
$sth->execute();
-1
По вопросам рекламы [email protected]