2013-06-03 4 views
1

У меня проблема на моем веб-сайте, я пытаюсь получить некоторые данные из таблицы с названиями курсов. Я ищу по названию этого курса. некоторые из них содержат в них «&», например «Официальные языки & Automata», и мне нужно получить все записи, связанные с этим курсом.искать те записи, которые имеют значение столбца с & в нем

Когда я пытаюсь ниже заявление SQL, она не в том, чтобы то, что я хочу:

SELECT * FROM tablename WHERE course = 'Formal Languages & Automata' 

Запрос на поиск «формальных языков» только и пренебрегает & и ничего после этого.

У кого-нибудь есть решение?

Благодаря

+0

Можете ли вы опубликовать, как строится ваш запрос и как вы выводите данные? Сам амперсанд не имеет особого значения в MySQL, поэтому наличие или отсутствие его в строке не может вызвать никаких проблем. – pilsetnieks

ответ

0

Я думаю, что это может произойти в, если вы передаете значение, которое вы ищете по в строке запроса GET или орган запроса POST без URL-encoding, поэтому, когда PHP получает запрос, часть после & считается следующей переменной в запросе. Если вы сделаете запрос с PHP, вам нужно использовать urlencode(), и если он находится в Javascript, это функция encodeURIComponent.

0

Вы должны бежать амперсанд (&) символов в строке:

SELECT * FROM tablename WHERE course = 'Formal Languages \& Automata' 
+1

Это не Oracle, сам амперсанд не имеет особого значения в строках MySQL. – pilsetnieks

0

Вы можете использовать LIKE

SELECT * FROM tablename WHERE course LIKE 'Formal Languages%' 

Это заявление будет найти каждый курс, который начинается с «формальным языком», и в конце он может иметь любые символы.

http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html#operator_like

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

Пример PDO

$sth = $dbh->prepare('SELECT * FROM tablename WHERE course = :search'); 
$sth->bindParam(':search', 'Formal Languages & Automata', PDO::PARAM_STR); 
$sth->execute(); 

Более подробная информация о PDO here

+0

Спасибо большое, ребята, я смог решить это с помощью url, кодирующего переменную, переданную в GET. – Menshawi

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