antoncauer
@antoncauer
Начинающий программист

Почему не выполняется запрос если в переменной есть точка?

1) $id_kar = 150;
mysql_query("DELETE FROM nametable WHERE id = ".$id_kar."",$link);

2)$ url_kar = '20160418123044766.png';
mysql_query("DELETE FROM nametable WHERE url = ".$url_kar."",$link);

Первый запрос с удалением по id выполняется успешно, а второй с удалением по url нет.
В чем может быть причина?
У меня есть догадки по поводу того, что я неправильно передаю значение переменной с точкой.
Так как при прямой подстановке значения запрос выполняется.
  • Вопрос задан
  • 202 просмотра
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Точка - это специальный символ в SQL. Их нужно экранировать, оборачивая токен в специальные символы. В mysql для этого используется backtick: `. Но экранировать нужно названия и алиасы колонок и таблиц.
В вашем конкретном случае не хватает банальных кавычек вокруг строки со значением:
DELETE FROM nametable WHERE url = "foo.bar.baz"
Первый запрос работает без кавычек потому, что id - это integer, их оборачивать необязательно.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
madmaker
@madmaker
Full stack программист
mysql_query("DELETE FROM `nametable` WHERE `url` = '".$url_kar."'",$link);

Я имя таблицы и колонки обрамляю в `, а данные в '
Главное в самих данных ' экранируйте или преобразуйте.
Все работает.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы