2016-05-06 3 views
-2

Я имею эту строку в PHP, который создает параметр запроса в PDO:как предотвратить превращение% (номер) к коду

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

Линия MySQL в вопросе выглядит следующим образом:

d.d_name LIKE :criteria 

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

6008 

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

%6008% 

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

`08% 

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

Как я могу остановить это?

+1

«но то, что я получаю», но вы получаете его где? – zerkms

+0

Используете ли вы рамки, ORM или любой уровень абстракции? – MonkeyZeus

+1

Ни PHP, ни PDO не преобразуют ваши данные. Он остается точно таким же. Таким образом, с вашим кодом не возникает никакой проблемы. –

ответ

0

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

Таким образом, в этом случае, вместо того, чтобы использовать привязку, смонтировать запрос в виде строки:

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

отладки $ поиска, чтобы убедиться, что он не имеет никаких кавычек или что-нибудь, прежде чем конкатенация. Если он убрал с отделкой или что-то в этом роде.

Также не забудьте проверить корректный поиск $ из-за атак sql-injection.

0

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

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

+0

». Я хотел бы указать, что ОП, скорее всего, использует какую-то фреймворк, а данные '$ _POST' обрабатываются до того, как они будут привязаны к' $ search'. Также возможно, что OP может иметь какой-то неизвестный JS-код, делающий что-то подобное. [У меня была такая проблема раньше] (http://stackoverflow.com/questions/20081165/some-chars-encoded-during-post-while-others-are-not) – MonkeyZeus

+0

Ваш ответ не разрешает проблема. –

-1

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

-1

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

$sth = $dbh->prepare("SELECT * 
    FROM `test` 
    WHERE `criteria` LIKE :criteria"); 
$sth->bindParam(':criteria', '%'.$search.'%'); 
$sth->execute(); 
+0

* Точно * тот же неверный ответ уже был дан, но был удален автором из-за сильного отрицательного голосования. –

+0

@YourCommonSense, я думаю, что вопрос неполный в отношении данных, представленных в первую очередь. Скорее всего, @ raphael75 является некорректным кодированием url, так как '% 60' преобразуется в' http://www.w3schools.com/tags/ref_urlencode.asp –

+0

Это не повод для ответа, который сам по себе не соответствует –

Смежные вопросы