$string = 'Loreum';
$insert = "INSERT INTO table (field1, field2) VALUES ($string , 7)";
$conn -> query($insert)
Это приведет к ошибке:Почему мы должны включить кавычки при вставке строковую переменную в PHP базы данных MySQL
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'ashfjksaf' in 'field list'' in C:\xampp\htdocs\yipee.php:23 Stack trace: #0 C:\xampp\htdocs\yipee.php(23): PDO->query('INSERT INTO yea...') #1 {main} thrown in C:\xampp\htdocs\yipee.php on line 23
Однако, когда я изменяю
$insert = "INSERT INTO table (field1, field2) VALUES ('$string' , 7)";
Он работает, как ожидалось . Интересно, почему мы должны включать одинарный кавычек в строковой переменной. Я думал, что нам нужно включить метку кавычек в литералную строку.
если поместить переменный PHP между одинарными кавычками, компилятор будет использовать переменный. Если вы не используете его, из-за двойной строки, он будет обрабатывать строку $ string как $ string, а не то, что она держит. – KarelG
Вам не нужно включать кавычки, если вы использовали [подготовленные заявления] (http://www.php.net/manual/en/pdo.prepared-statements.php). Что вы должны сделать в любом случае в качестве меры безопасности. Чтобы ответить на ваш вопрос, когда вы помещаете '$ string' в строку запроса, его значение * становится строковым литералом *. Попробуйте распечатать '$ insert' после этого, чтобы увидеть, какой запрос фактически отправляется в БД ... – DCoder
Подумайте об этом: что, если вы сказали' $ string = 'Loreum, что-то еще'; '? Что бы тогда выглядела '$ insert'? – JJJ