我有一个简单的php INSERT INTO SQL语句,它只是拒绝一次更新多个列。我不知道为什么,但以下声明是可接受的;
$sql = "INSERT INTO niceTable (first) VALUES ('Hello')";
但是,如果我尝试关注
$sql = "INSERT INTO niceTable (first, last) VALUES ('Hello', 'You')";
它崩溃并抛出以下错误:
"更新记录时出错:您的SQL语法出错;检查与您的MariaDB服务器版本相对应的手册,以获得正确的语法,以便使用(' desc)VALUES(' Hello','更新')'在第1行"
我检查了语法,但似乎没问题。我正在使用one.com服务器。有人有任何提示吗?
答案 0 :(得分:3)
根据您发布的代码":
原因是first
和last
是MySQL保留字
需要特别注意。
将它们包裹在刻度线中,或者将它们重命名为保留关键字以外的其他内容。
INSERT INTO niceTable (`first`, `last`)
修改但是,您的错误不支持此处的问题,也不支持列名称:
正确的语法在' desc)
附近使用
这告诉我你正在使用desc
这也是另一个MySQL保留字。
您还应该使用预备语句
另外,如果您的输入包含MySQL可能会抱怨的字符,例如撇号John O'Neil
,那么您将需要转义这些值。
MySQL会将其解释为('Hello', 'John O'Neil')
,从而导致另一种语法错误。
转义它,将其解释为('Hello', 'John O\'Neil')
使其有效。
答案 1 :(得分:2)
您的实际查询(不是您问题中的查询)似乎有所不同。错误消息似乎在某处desc
,这是一个保留字。如果您使用保留字作为列名(不要),则应将它们用反引号括起来:
INSERT INTO tbl (`order`, `desc`) VALUES ('foo', 'bar');
答案 2 :(得分:1)
将列名括在反引号中
Last是MySQL中的一个函数
$sql = "INSERT INTO niceTable (`first`, `last`) VALUES ('Hello', 'You')";