插入带有可能的默认/空值的语句

时间:2012-01-27 17:45:22

标签: mysql

我的数据库结构如下:

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    

3 个答案:

答案 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', '', '')

...或提供一个参数列表,省略您不希望填充的字段。