используя переменную php в mysql LIKE

0

Я хочу написать mysql-запрос примерно так:

выберите * из книг, где заголовок '$ Название _';

$title - это переменная php. когда я запускаю указанный выше запрос, он выдает сообщение об ошибке

'$ title_ variable not found'

Как я могу это достичь?

Спасибо..

Теги:

8 ответов

4
Лучший ответ

Сделайте это так:

$query = "select * from books where title like '{$title}_';"
$result = mysql_query($query) or die(mysql_error());

Окружая переменную в {}, вы можете указать, что только $title является переменной, а не _. И строка с двойной кавычкой будет обеспечивать, чтобы эта переменная расширялась до ее значения.

  • 1
    спасибо шамтомар
  • 0
    Пожалуйста.
Показать ещё 1 комментарий
8

Использование:

"... WHERE title LIKE '". mysql_escape_real_string($title) ."_'";

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

WHERE title LIKE '{$title}_'";

.. но там риск атаки SQL Injection

  • 0
    +1 за то, что пока единственный ответ на вопрос о побеге ...
0

У вас есть переменная $title_ или это просто $title?

Если его просто $title, то:

$query = "select * from books where title like '".$title."_'";
  • 0
    Подчеркивание является частью LIKE , оно должно соответствовать любому отдельному символу. итак: $query = "select * from books where title like '".$title."'_";
0

$query = "SELECT * FROM books WHERE title LIKE '". $title. "_';";

0

$query = "select * from books where title like". $title_. "'";

0

Строка запроса должна выглядеть так:

$query  = "select * from books where title like '".$title."_'";

Обратите внимание, что '".$title."_'

Ошибка, которую вы получаете, заключается в том, что ваш запрос принимает $title, а не значение вашей переменной php $title

0

Запрос mysql - это просто строка. Вам просто нужно поместить значение переменной php в $title внутри этой строки. Проблема состоит в том, что за этой строкой следует символ подчеркивания, который действителен в имени переменной, поэтому вы должны разграничить имя переменной или подчеркивание, которое будет включено в это имя.

Существует несколько способов сделать это, например:

$query = "select * from books where title like '${title}_'";
$query = "select * from books where title like '".$title."_'";

Как сказал OMG Ponies, если $title поступает с некоторого пользовательского ввода, а не из некоторой контролируемой части вашей программы (например, в другой таблице в базе данных), переменная также должна быть защищена или есть некоторые риски атаки SQL-инъекций ( выполнение нескольких запросов и, более конкретно, запрос, подготовленный некоторым хакером, как некоторый допустимый SQL).

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

Я обычно делал:

$query = "select * from books where title like '".addslashes($title)."_'";

но есть другие варианты, зависящие от контекста экранирования и от того, от чего вы хотите защитить.

  • 0
    -1: addslashes как правило, не очень хорошая идея ... Плохой выход из ситуации хуже, чем отсутствие выхода (так как вы думаете, что вы в безопасности, когда нет) ...
  • 0
    @ircmaxell: это не проблема, если я имею дело не с пользовательским вводом, а с контролируемыми данными, как я и предлагал. В этом контексте addlashes достаточно хорош (например, для защиты от необработанных цитат при вводе, как я и предлагал). Для пользовательских вводов обычно требуется гораздо больше обработок, прежде чем использовать их в каком-либо запросе SQL. Я всегда считал довольно сумасшедшей (даже если это на самом деле распространено) идею простой защиты ввода и небрежного смешивания utf-8 и различных кодовых страниц в базе данных.
0

Try:

"select * from books where title like '{$title}_';"

В фигурных скобках сначала оценивается переменная, а затем добавляется ваш шаблон _ к значению переменной, тем самым обеспечивая запрос sql с вашими критериями поиска.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню