2013-12-10 3 views
0

Я использую подготовленные операторы для обработки входящих почтовых данных, очистки массива и вставки в базу данных MySQL.Почему этот синтаксис инструкции MySQL неправильный?

Вот SQL заявление, только до его представления:

INSERT INTO LoggedCarts (Bill-Address1,Bill-Address2,Bill-City,Bill-Company,Bill-Country,Bill-Email,Bill-Firstname,Bill-Lastname,Bill-Name,Bill-Phone,Bill-State,Bill-Zip,Card-Expiry,Card-Name,Card-Number,Comments,Date,ID,IP,Item-Code-1,Item-Count,Item-Description-1,Item-Id-1,Item-Quantity-1,Item-Taxable-1,Item-Thumb-1,Item-Unit-Price-1,Item-Url-1,Numeric-Time,Ship-Address1,Ship-Address2,Ship-City,Ship-Company,Ship-Country,Ship-Email,Ship-Firstname,Ship-Lastname,Ship-Name,Ship-Phone,Ship-State,Ship-Zip,Shipping,Space-Id,Store-Id,Store-Name,Tax-Charge,Total) VALUES ("Pineapple Highway","","Orange","","US United States","[email protected]","Bob","Dole","Bob Dole","9075554509","CA","97056","","Check","NumberTemporarilyUnavailable","","Tue Dec 10 16:55:11 2013 GMT","yhst-130408242826480-485","50.78.241.193","TERRALUX-TT-5","1","Terralux TT-5 LED Tactical Flashlight 650 Lumens Uses 2 x CR123 or 1 x 18650","terralux-tt-5","3","YES","","112.49","http://www.batteryjunction.com/terralux-tt-5.html","1386694511","Pineapple Highway","","Orange","","US United States","[email protected]","Bob","Dole","Bob Dole","9075554509","CA","97056","Air (3-5 days)","","yhst-130408242826480","BatteryJunction.com","0.00","337.47") 

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

Примечание. Как было указано ниже, использование дефис в именах столбцов нахмурилось, так как оно требует специальной подготовки перед отправкой запроса. В этом случае я сопоставляю имена столбцов с массивом входящих данных. Я мог бы пройти и очистить массив ключей, удалив дефисы, что было бы альтернативным решением.

В целом, как предложено ниже, правильное решение вопроса о том, почему этот SQL-запрос терпит неудачу, - это использование специальных символов (дефис) в имени столбца, что приводит к необходимости использования обратного вывода вокруг столбца name (backtick = `where as apostrophe = '), позволяющий считать имя столбца непрерывным.

Наблюдая, где разрыв произошел путь тестирования первоначального заявления в PHPMyAdmin:

#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 '-Address1,Bill-Address2,Bill-City,Bill-Company,Bill-Country,Bill-Email,Bill-Firs' at line 1 

сделал дать ключ к пониманию того, почему заявление терпит неудачу.

Спасибо за помощь, ребята!

+1

@bksi 'ID' не является [зарезервированным словом] (http://dev.mysql.com/doc/refman/5.6/en/reserved-words.html). – tadman

+0

Всегда лучше использовать символы подчеркивания. Я никогда не любил использовать дефисы для чего-либо; Рад, что я этого не сделал. –

ответ

7

Вам нужно избегать имен столбцов со специальными символами с обратными окнами. - - особый символ. Используйте

INSERT INTO LoggedCarts (`Bill-Address1`, ... 
+0

Это похоже на то, что имена столбцов похожи на суперподобные. Старайтесь не создавать схему с таким неловким соглашением об именах. – tadman

1

Если эти имена полей действительно включают знак минус, то они должны быть заключены в обратных кавычках:

`Bill-Address1` 
-1

Попробуйте вставить значение строки в одинарных кавычках вместо.

+0

Это не имеет значения в MySQL с настройками по умолчанию. – tadman

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