2013-07-23 3 views
0

У меня есть этот следующий SQL код:Sql с тузда зарезервированным словом

$sql = "INSERT INTO data (Artist, Name) VALUES ('TF2', 'you're right behind me')"; 

Сам код выглядит нормально, но по какой-то причине MySQL не хочет, чтобы позволить мне, чтобы сохранить его. Я получаю следующее сообщение об ошибке:

"#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 're right behind me')' at line 1" 

То, что я знаю, проблема в том, что слова «право» быть зарезервированы в MySQL, но мне нужно, чтобы сохранить его, так как должен мой код выглядеть. Все отзывы взяты из расчета

+1

Я считаю, что это связано с дополнительным одиночным qoute '' вы прямо позади меня''''''''''. Может быть, вы можете избежать этого, используя обратную косую черту? – JunM

+0

Вам нужно избегать запятых. Например, используйте 'You \ 're'. Для этого есть функция, называемая 'addlashes'. Обратитесь к руководству PHP по этому вопросу http://php.net/manual/en/function.addslashes.php –

+1

это хороший аргумент для параметризованных запросов. – Orangepill

ответ

0

Как @fred и @JunM уже отмечали, у вас есть две проблемы. Во-первых, имя является зарезервированным словом. Во-вторых, у вас есть одна цитата внутри вашей одиночной кавычки. Смените ваш SQL на это:

$sql = "INSERT INTO data (`Artist`, `Name`) VALUES ('TF2', 'you\'re right behind me')"; 
+1

Это работает для этого конкретного примера, но дело в том, что имя передается пользователем и время от времени отличается от времени, есть ли какое-либо решение для обеспечения безопасности? –

+0

@AmandaWood http://php.net/manual/en/function.addslashes.php –

+0

@Fred Спасибо. :) –

0

Ваша проблема в том, что у вас есть ' в работе you're. Таким образом, ваша строка заканчивается в начале вашего предложения. Используйте you\'re вместо того, чтобы избежать персонажу '

$sql = "INSERT INTO data ('Artist', 'Name') VALUES ('TF2', 'you\'re right behind me')"; 
0

Мой опыт работы с MySQL ограничен, но я широко использую SQL Server. Мне кажется, что проблема заключается в апострофии, используемой в «ты прямо позади меня». В сервере SQL, я должен был бы использовать двойной apostrophy, так что инструкция SQL будет что-то вроде этого (обратите внимание на двойную apostrophy в You''re):

$sql = "INSERT INTO data (Artist, Name) VALUES ('TF2', 'you''re right behind me')"; 

Надеется, что это помогает. С уважением

+0

Это неправильно, вам нужно сбежать с ' – ObieMD5

+0

Спасибо за разъяснение @ ObieMD5. Я использую двойные кавычки в SQL Server. С уважением – aplon

+2

еще один аргумент для параметризованных запросов ... escaping выполняется в соответствии с базой данных. – Orangepill

Смежные вопросы