Я хочу написать mysql-запрос примерно так:
выберите * из книг, где заголовок '$ Название _';
$title - это переменная php. когда я запускаю указанный выше запрос, он выдает сообщение об ошибке
'$ title_ variable not found'
Как я могу это достичь?
Спасибо..
Сделайте это так:
$query = "select * from books where title like '{$title}_';"
$result = mysql_query($query) or die(mysql_error());
Окружая переменную в {}
, вы можете указать, что только $title
является переменной, а не _
. И строка с двойной кавычкой будет обеспечивать, чтобы эта переменная расширялась до ее значения.
Использование:
"... WHERE title LIKE '". mysql_escape_real_string($title) ."_'";
Вы можете использовать:
WHERE title LIKE '{$title}_'";
.. но там риск атаки SQL Injection
У вас есть переменная $title_ или это просто $title?
Если его просто $title, то:
$query = "select * from books where title like '".$title."_'";
LIKE
, оно должно соответствовать любому отдельному символу. итак: $query = "select * from books where title like '".$title."'_";
$query = "SELECT * FROM books WHERE title LIKE '". $title. "_';";
$query = "select * from books where title like". $title_. "'";
Строка запроса должна выглядеть так:
$query = "select * from books where title like '".$title."_'";
Обратите внимание, что '".$title."_'
Ошибка, которую вы получаете, заключается в том, что ваш запрос принимает $title
, а не значение вашей переменной php $title
Запрос 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)."_'";
но есть другие варианты, зависящие от контекста экранирования и от того, от чего вы хотите защитить.
addslashes
как правило, не очень хорошая идея ... Плохой выход из ситуации хуже, чем отсутствие выхода (так как вы думаете, что вы в безопасности, когда нет) ...
Try:
"select * from books where title like '{$title}_';"
В фигурных скобках сначала оценивается переменная, а затем добавляется ваш шаблон _
к значению переменной, тем самым обеспечивая запрос sql с вашими критериями поиска.