2012-12-27 67 views
3

我可能在查询的语法上犯了一个愚蠢的错误,但我无法缝合来修复它。这是我的程序试图执行查询:为什么我不能将此插入到MySQL中?

INSERT INTO filez (
    filename, 
    uploadedby, 
    dateuploaded, 
    public, 
    FileSize, 
    FileTransferSize, 
    key, 
    bytes 
) 
VALUES(
    'tommy3244/tesABCscdsdasdasdD.testtest', 
    'tommy3244', 
    '%27 %December %2012, %7:%32:%15%AM', 
    1, 
    7, 
    7, 
    '`', 
    'TestDoc' 
) 

而这里的mysql_error:

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 'key, bytes) VALUES('tommy3244/tesABCscdsdasdasdD.testtest', 'tommy3244', '%27 %D' at line 1

我上除了文件大小和FileTransferSize查询一切正常mysql_real_escape_string()。你能告诉我我做错了什么吗?谢谢!

+0

这是什么都用PHP做什么? –

+0

我的脚本是PHP –

+0

请提供您的表格创建查询 –

回答

13

该错误告诉您错误发生在文本key处,并且非常正确:key is a reserved word in MySQL

如果您使用它作为字段名称,您必须在反斜杠(`)中包含它;无论如何,这是一个很好的普遍做法。

所以:

INSERT INTO `filez` (
    `filename`, 
    `uploadedby`, 
    `dateuploaded`, 
    `public`, 
    `FileSize`, 
    `FileTransferSize`, 
    `key`, 
    `bytes` 
) 
VALUES(
    'tommy3244/tesABCscdsdasdasdD.testtest', 
    'tommy3244', 
    '%27 %December %2012, %7:%32:%15%AM', 
    1, 
    7, 
    7, 
    '`', 
    'TestDoc' 
) 
+0

我只是将引号括起来。它现在很好用! –

+0

@ Tommy3244:最好在反引号(_not_“quotations”)中加入_all_字段名称。这样可以保持一致性并防止您再次遇到问题。它也有助于语法突出显示,并可能使解析速度稍快。 –

+0

好吧,我认为这是单引号! :-) 谢谢! –

4

尝试使用下面的查询

INSERT INTO filez (filename, uploadedby, dateuploaded, public, FileSize, FileTransferSize, `key`, bytes) VALUES 
('tommy3244/tesABCscdsdasdasdD.testtest', 'tommy3244', '%27 %December %2012, %7:%32:%15%AM', 
1, 7, 7, '`', 'TestDoc') 

key是关键字,所以我们有正如我前面曾经使用反引号。 欲了解更多信息检查以下问题太 Select a column with a keyword name

+1

一个很好的答案_解决问题。您的建议查询也非常不一致。 –

+1

@ArashMilani - 感谢您的评论。我编辑了我的答案 –

4

关键是保留字和列名不使用backtics你不能使用它。试试这个

INSERT INTO filez (`filename`, `uploadedby`, `dateuploaded`, `public`, `FileSize`, `FileTransferSize`, `key`, `bytes`) VALUES('tommy3244/tesABCscdsdasdasdD.testtest', 'tommy3244', '%27 %December %2012, %7:%32:%15%AM', 1, 7, 7, '`', 'TestDoc') 
3
INSERT INTO `filez` (`filename`, `uploadedby`, `dateuploaded`, 
        `public`, `FileSize`, `FileTransferSize`, 
        `key`, `bytes`) 
     VALUES('tommy3244/tesABCscdsdasdasdD.testtest', 'tommy3244', 
       '%27 %December %2012, %7:%32:%15%AM', 1, 7, 7, '`', 'TestDoc')  

OK,

syntax to use near 'key, bytes)都是保留字,比较好的做法是始终使用用户定义的标识符`迹象。

+1

一个很好的答案_explains_问题。 –

0

KEY保留关键字为MySQL

尝试其他列名或使反引号这样的``

0

问题是关键是的mysql的保留关键字,你不能把它作为列名,如果你真的想那么它括反引号字符内

key

相关问题