Одиночные кавычки являются разделителями для оператора SQL и не имеют ничего общего с PHP. Они сообщают MySQL, где начинается значение для поля и где оно останавливается.
Рассмотрим это:
SELECT * FROM mytable WHERE field=new order by name desc
Если запрос ограничить, где field
= «новый порядок по названию по алфавиту» или он должен ограничивать где field
= «новый», а затем упорядочить результаты по полю «имя» в в порядке убывания?
Кавычки сделать что явным:
SELECT * FROM mytable WHERE field='new order by name desc'
Кроме: это причина, вы должны избежать ваших ценностей в MySQL. Если пользователь ' OR 1 = 1; --
в поле вашего имени пользователя, и ваш запрос для аутентификации:
SELECT * FROM users WHERE username = '$_POST['username']' AND password = '$_POST['password']'
Вы в конечном итоге с:
SELECT * FROM users WHERE username = '' OR 1 = 1 -- ' AND password = 'asfd'
Который действует SQL и выбрать всех пользователей в вашей таблице (потому что вход с $_POST['username']
сделал остальную часть запроса закомментирована Однако, если вы правильно избежать значения, вы в конечном итоге с:.
SELECT * FROM users WHERE username = '\' OR 1 = 1 -- ' AND password = 'asfd'
Это означает, MySQL будет искать пользователя с username
= \' OR 1 = 1 --
и подходящим паролем.Вы можете избежать простого mysqli_real_escape_string
, однако PDO и параметризованные запросы всегда рекомендуются.
Я настоятельно рекомендую вам ознакомиться с некоторыми учебниками по PDO, параметрам и SQL-инъекции перед работой с базой данных в любом веб-приложении. Вы поблагодарите себя позже.
Потому что иначе MySQL будет ошибкой, если бы он не был числом, поскольку вы не разбираете значения в '' '' s. Это будет похоже на создание такой строки PHP: '$ myvar = mytext', и это не сработает. Обратите внимание, что вы готовитесь неправильно и по-прежнему очень уязвимы для инъекций SQL. – h2ooooooo
Вы искали stackoverflow? http://stackoverflow.com/questions/3446216/difference-between-single-quote-and-double-quote-string-in-php – xblitz
Вы не должны использовать одинарные кавычки. Вы должны использовать заполнители и связанные переменные. Как бы то ни было, вы вставляете строки ввода пользователя в свой SQL и подвергаете себя атакам SQL Injection. – Quentin