MYSQL和PHP INSERT NULL值

时间:2012-11-08 07:28:09

标签: php mysql

假设我的表只有这些成员 - id(密钥)和日期(默认为 NULL )。 现在当我想用我的php插入一行时,我是否需要在查询之前检查日期是否有值,或者我可以像这样插入 -

 $query = "INSERT INTO mytable VALUES(3,{$_GET['date]})" 

mysql会为日期分配一个NULL值吗?

无论多大,这都适用于桌子吗?

例如:我可以插入许多来自php的值,并且可能是空的(或null)到表,并且mysql会自动为它们分配NULL(如果我默认将它们定义为NULL)或者我是否需要在插入之前做各种检查?

5 个答案:

答案 0 :(得分:1)

This might be relevant这也可以确保您不会受到SQL注入攻击的攻击。

我要说的是亲自检查每个变量,然后在将变量放入数据库之前,您可以更好地控制变量。

答案 1 :(得分:1)

不,它将分配使用参数$_GET['date']传递的值。如果值为空''且日期属于数据类型varchar,则会插入与''不同的值NULL,然后插入一个空值。那是因为NULL和空字符串不相等。它们是SQL中的两个不同的东西。

如果要插入NULL值,请忽略插入列列表中的此列,然后为其分配默认值NULL。或者在INSERT语句的值中明确写出来。

请注意:您的代码以这种方式容易受到SQL injection的攻击。您应该使用预准备语句或PDO。有关详细信息,请参阅此处:

答案 2 :(得分:0)

试试这个

 $query = "INSERT INTO mytable VALUES(3,'".$_GET['date']."')"; 

但是也要考虑表字段的数据类型,如果它设置为date / datetime,则检查$_GET['date']的返回值,它也必须以日期的形式。

答案 3 :(得分:0)

  1. 该代码段对SQL injection开放。逃避你的价值观或使用准备好的陈述!
  2. 如果变量不包含任何内容,则查询将显示为... VALUES (3,)。这是一个语法错误,所以它不起作用。
  3. 如果您将其更改为VALUES(3, '{$_GET['date']}')",那么在空变量的情况下,查询将为... VALUES(3, ''),空字符串就是值。对于相关列,如果是日期列,则会将其转换为某个合理的值,并将其转换为无法识别的日期。那不是NULL
  4. NULL仅适用于完全从查询中删除列或明确将其设置为NULL的情况。在任何其他情况下,该值将不是NULL

答案 4 :(得分:0)

$date = date("d-m-Y",strtotime($_GET['date']));
if(isset($date))
    $query = "INSERT INTO mytable VALUES(3,$date)";