php mysql INSERT INTO列(如果存在)

时间:2012-07-29 11:26:35

标签: php mysql

在一个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')") ; 

不起作用 - 如何纠正此问题。

1 个答案:

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

  •   

因此,您可以:

  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)