我正在使用PDO预处理语句来插入值。其中一个值是日期,有时它可以为空。在MySQL模式中,日期列设置为允许NULL值。
假设date_column是一个日期,它允许NULL。当我这样做时:
$query = "INSERT INTO tbl(date_column) VALUES(?)";
$stmt = $pdo->prepare($query);
$stmt->execute(['']);
这给了我这个错误:
SQLSTATE [22007]:日期时间格式无效:1292日期值不正确:第1行第'date_column'列的'''
在phpMyAdmin中,我可以无错误地执行此查询。它将日期设置为 0000-00-00
INSERT INTO tbl(date_column) VALUES('')
这不是上面代码示例中幕后PDO执行的相同查询吗?怎么了?
我想要的只是能够插入空字符串''作为没有错误的日期。我不在乎它是否设置为 0000-00-00
答案 0 :(得分:1)
评论太长了。
这是一个根本问题:
我想要的就是能够插入空字符串''作为约会。
字符串是字符串,日期是日期。您不应该在列中插入空字符串,因为这没有意义。相反,您应该插入NULL
值或默认值。
因此,您的代码应如下所示:
INSERT INTO tbl(date_column)
VALUES(NULL)
或:
INSERT INTO tbl(date_column)
VALUES(DEFAULT)
MySQL使用参数更好地对准备好的查询进行类型检查这一事实实际上是一件好事。
答案 1 :(得分:0)
空字符串不是空... NULL是NULL
$stmt->execute([null]);