在一个php文件中,使用这行代码在表TABONE中插入一些文本
mysql_query("INSERT INTO `TABONE` VALUES ('$q1', '$q2', '$q3', '$q4', '$q5')") ;
代码工作正常,因为“我们收到5个变量,此表包含5列”
但有时我们收到的5个变量只包含3列,在这种情况下我们只想插入前3个变量('$ q1','$ q2','$ q3') 3列。
在这种情况下
mysql_query("INSERT INTO `TABONE` VALUES ('$q1', '$q2', '$q3', '$q4', '$q5')") ;
不起作用 - 如何纠正此问题。
答案 0 :(得分:1)
如the manual中所述:
如果未在严格SQL模式下运行,则任何未显式赋值的列都将设置为其默认值(显式或隐式)。例如,如果指定的列列表未指定表中的所有列,则将未命名的列设置为其默认值。默认值分配在Section 11.5, “Data Type Default Values”中描述。另请参阅Section 1.8.6.2, “Constraints on Invalid Data”。
如果您希望
INSERT
语句生成错误,除非您为没有默认值的所有列显式指定值,则应使用严格模式。请参阅Section 5.1.6, “Server SQL Modes”。使用关键字
DEFAULT
将列明确设置为其默认值。这样可以更轻松地编写INSERT
语句,将值分配给除几列之外的所有列,因为它可以避免编写不包含表中每列的值的不完整VALUES
列表。否则,您必须写出与VALUES
列表中每个值对应的列名列表。您还可以使用
DEFAULT(col_name)
作为更通用的表单,可以在表达式中使用它来生成给定列的默认值。
因此,您可以:
为列命名并省略您想要默认值的列:
INSERT INTO TABONE (colA, colB, colC) VALUES ('$q1', '$q2', '$q3')
或者,如果您更喜欢SET
语法:
INSERT INTO TABONE SET colA='$q1', colB='$q2', colC='$q3'
使用DEFAULT
关键字将其他列显式设置为默认值:
INSERT INTO TABONE VALUES ('$q1', '$q2', '$q3', DEFAULT, DEFAULT)