1

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

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

mysql 会为 date 分配一个 NULL 值吗?

这是否适用于一张桌子,无论多大?

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

4

5 回答 5

1

这可能是相关的,这也将确保您不会受到 sql 注入攻击。

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

于 2012-11-08T07:32:26.937 回答
1

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

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

请注意:您的代码以这种方式容易受到SQL 注入的影响。您应该改用准备好的语句或 PDO。有关更多详细信息,请参见:

于 2012-11-08T07:37:20.177 回答
0

试试这个

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

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

于 2012-11-08T07:34:00.260 回答
0
  1. 该片段对SQL 注入是开放的。逃避你的价值观或使用准备好的陈述!
  2. 如果变量不包含任何内容,则查询将如下所示... VALUES (3,)。这是一个语法错误,所以它不起作用。
  3. 如果您将其更改为VALUES(3, '{$_GET['date']}')",那么在空变量的情况下查询将是... VALUES(3, ''),空字符串是值。对于有问题的列,这将被转换为某个合理的值,如果是日期列,则转换为无法识别的日期。那不是NULL

NULL仅当您从查询中完全省略该列或将其显式设置为时才适用NULL。在任何其他情况下,该值将不是NULL.

于 2012-11-08T07:36:49.730 回答
0
$date = date("d-m-Y",strtotime($_GET['date']));
if(isset($date))
    $query = "INSERT INTO mytable VALUES(3,$date)";
于 2012-11-08T07:41:38.113 回答