在php文件中,使用这行代码在表TABONE 中插入一些文本
mysql_query("INSERT INTO `TABONE` VALUES ('$q1', '$q2', '$q3', '$q4', '$q5')") ;
代码运行良好,因为"我们收到5个变量,该表包含5列"
但有时我们会为一个只包含3列的表接收5个变量,在这种情况下,我们只想在这3列中插入前3个变量("$q1"、"$q2"answers"$q3")。
在这种情况下,
mysql_query("INSERT INTO `TABONE` VALUES ('$q1', '$q2', '$q3', '$q4', '$q5')") ;
不起作用-如何更正。
如手册所述:
如果您不是在严格的SQL模式下运行,任何未显式给定值的列都将设置为其默认值(显式或隐式)。例如,如果指定的列列表没有命名表中的所有列,则未命名列将设置为其默认值。默认值分配如第11.5节"数据类型默认值"所述。另请参见第1.8.6.2节"无效数据的限制"。
如果希望
INSERT
语句生成错误,除非显式指定所有没有默认值的列的值,则应使用严格模式。请参阅第5.1.6节"服务器SQL模式"。使用关键字
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)