【发布时间】:2013-11-12 11:26:54
【问题描述】:
我正在尝试在我的数据库中插入一个新行,其中包含一个日期和相同的日期加上 1 周。
我在php中使用PDO,不知道是否相关。
这是失败的代码:
$stmtEncInsert = $db->prepare("INSERT INTO test
(id_Event, NIF, name , description, image, start_date, end_date)
VALUES (:idOfEvent, :NIF, :name, :description, :image, :startDate, DATE_ADD(:date_end,INTERVAL 1 WEEK)
)");
$stmtEncInsert->execute(array(':idOfEvent' => $idOfEvent, ':NIF'=> $NIF, ':name' => $resEnc['name'], ':description' => $resEnc['description'],
':image' => $resEnc['image'], ':startDate' => $date_end, ':date_end' => $date_end));
我从其他查询中获得了一些数据(例如:$resEnc['..']),但所有数据都正常。我试图在一个文件中打印所有数据,它们都很好,它们存在。
问题是最后一个字段(end_date)总是报错,总是说:你不能把这个字段留空...
我认为这是 DATE_ADD 左右的问题,但我没有找到与此相关的任何内容。
我测试了删除 DATE_ADD 并仅使用 current_date 并且它有效,所以我猜这是问题所在。
有什么想法吗?
我使用 MySQL 作为引擎
这是给定异常的输出:
Integrity constraint violation: 1048 Column 'end_date' cannot be null
$date_end 包含 0000-00-00 它是一个有效的日期,并且字段是从另一个查询的数据库中获取的 DATE 类型
【问题讨论】:
-
你需要学会调试你的代码
-
作为一般建议:始终发布实际的错误消息(您可以使用剪贴板,这样您就不需要输入)而不是您对它们的解释。此外,如果
DATE_ADD(:date_end,INTERVAL 1 WEEK)有问题,如果我们不知道:date_end包含什么,我们如何诊断?如果$date_end是"Dog",那么它失败的原因就很明显了。 -
我已经添加了更多信息
-
stackoverflow.com/questions/10067782/… 读一读,它基本上无法接受 DATE_ADD 作为准备的一部分。所以在 bind_value 中这样做。
-
准备时不需要
:date_end。只需使用:startDate。