假设我的表只有这些成员 - id(密钥)和日期(默认为 NULL )。 现在当我想用我的php插入一行时,我是否需要在查询之前检查日期是否有值,或者我可以像这样插入 -
$query = "INSERT INTO mytable VALUES(3,{$_GET['date]})"
mysql会为日期分配一个NULL值吗?
无论多大,这都适用于桌子吗?
例如:我可以插入许多来自php的值,并且可能是空的(或null)到表,并且mysql会自动为它们分配NULL(如果我默认将它们定义为NULL)或者我是否需要在插入之前做各种检查?
答案 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)
... VALUES (3,)
。这是一个语法错误,所以它不起作用。VALUES(3, '{$_GET['date']}')"
,那么在空变量的情况下,查询将为... VALUES(3, '')
,空字符串就是值。对于相关列,如果是日期列,则会将其转换为某个合理的值,并将其转换为无法识别的日期。那不是NULL
。 NULL
仅适用于完全从查询中删除列或明确将其设置为NULL
的情况。在任何其他情况下,该值将不是NULL
。
答案 4 :(得分:0)
$date = date("d-m-Y",strtotime($_GET['date']));
if(isset($date))
$query = "INSERT INTO mytable VALUES(3,$date)";