我的数据库结构如下:
col1 INT not null default_none primary
col2 VARCHAR null null
col3 VARCHAR null null
.
.
.
col9 VARCHAR null null
我在php中准备以下查询。 col1,col4,col7的值不能为null。其余的将基于用户输入的内容。我已经定义了 $ table 和所有其他必需变量
我按如下方式准备 INSERT 语句:
INSERT INTO $table VALUES ($col1, '$col2 ' , '$col3 ', '$col4' , '$col5 ', '$col6 ', '$col7', '$col8 ', '$col9 ').
但 mysql 报告错误。我是对的吗?
错误:#1064 - 您的SQL语法出错;检查与MySQL服务器版本对应的手册,以便在第1行的')'附近使用正确的语法
我的表格结构:
Field Type Null Key Default Extra
colNo1 int(10) NO PRIMARY NULL
collNo2 varchar(10) YES NULL
colNo3 varchar(10) YES NULL
colNo4 varchar(10) NO NULL
colNo5 varchar(10) YES NULL
colNo6 varchar(10) YES NULL
colNo7 varchar(10) NO NULL
colNo8 varchar(10) YES NULL
colNo9 varchar(10) YES NULL
答案 0 :(得分:3)
始终指定列名称,这样您就不会受到架构机会的影响,并始终始终转义变量。您没有理由在查询中添加任意纯文本。如果您使用的是PHP,请使用PDO为您处理转义问题,并使您的查询更易于阅读。
最终看起来更像是这样:
INSERT INTO `$table` (col1, col2, col3, col4, ...) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
PDO占位符将转换为NULL
,引用的字符串,数字或正确插入您可能拥有的任何值所需的任何内容。
答案 1 :(得分:0)
看起来像是SQL代码中的拼写错误。
你的意思是 $ col7 ?
答案 2 :(得分:0)
您在评论中表示您的查询如下所示:
INSERT INTO table1 VALUES (54, , , 'news', '', '', 'bean', '', '', 'palm', '', '')
所有PHP与问题完全无关,这与上述测试用例有关。
这些空参数是非法的。如果您想要空字段,请写NULL
INSERT INTO table1 VALUES (54, NULL, NULL, 'news', '', '', 'bean', '', '', 'palm', '', '')
...或提供一个参数列表,省略您不希望填充的字段。