2013-08-11 2 views
0
$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)"; 

Он работает, как ожидалось . Интересно, почему мы должны включать одинарный кавычек в строковой переменной. Я думал, что нам нужно включить метку кавычек в литералную строку.

+0

если поместить переменный PHP между одинарными кавычками, компилятор будет использовать переменный. Если вы не используете его, из-за двойной строки, он будет обрабатывать строку $ string как $ string, а не то, что она держит. – KarelG

+3

Вам не нужно включать кавычки, если вы использовали [подготовленные заявления] (http://www.php.net/manual/en/pdo.prepared-statements.php). Что вы должны сделать в любом случае в качестве меры безопасности. Чтобы ответить на ваш вопрос, когда вы помещаете '$ string' в строку запроса, его значение * становится строковым литералом *. Попробуйте распечатать '$ insert' после этого, чтобы увидеть, какой запрос фактически отправляется в БД ... – DCoder

+1

Подумайте об этом: что, если вы сказали' $ string = 'Loreum, что-то еще'; '? Что бы тогда выглядела '$ insert'? – JJJ

ответ

2

Вот как работает синтаксис MySQL. PHP просто строит запрос для вас.

PHP заменит $ строку с Loreum

поэтому запрос MySQL будет выглядеть следующим образом

INSERT INTO table (field1, field2) VALUES (Loreum , 7) 

, который недопустимый синтаксис.

Поэтому необходимо добавить кавычки.

+0

любой ссылкой, чтобы я мог узнать больше об этом? – dramasea

+1

@dramasea: что конкретно вы хотите знать? Это синтаксис 101 SQL, строковые литералы должны быть завернуты в кавычки, которые будут интерпретироваться как * строковые литералы *. – DCoder

+0

Я имею в виду, есть ли какой-нибудь сайт, на котором я могу ссылаться, чтобы я больше знал о синтаксисе sql – dramasea

0

все MySQL строка должна быть в одинарных кавычках

как

   insert into table_name (name,email)values('alok','[email protected]'); 
Смежные вопросы