php-mysql INSERT INTO列(如果存在)


php mysql INSERT INTO column if exist

在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)用作更通用的形式,它可以在表达式中用于生成给定列的默认值。

因此,您可以:

  1. 命名列并省略那些需要默认值的列:

    INSERT INTO TABONE (colA, colB, colC) VALUES ('$q1', '$q2', '$q3')
    

    或者,如果您喜欢SET语法:

    INSERT INTO TABONE SET colA='$q1', colB='$q2', colC='$q3'
    
  2. 使用DEFAULT关键字显式地将其他列设置为默认值:

    INSERT INTO TABONE VALUES ('$q1', '$q2', '$q3', DEFAULT, DEFAULT)