我环顾四周,只看到这个在使用SELECT时被使用,而不是INSERT,它让我很困惑。
我一直在尝试的是:
$statement = $pdo->prepare("INSERT INTO shipments (crate_type_id, username, arrival, quantity, type, status) VALUES ('$crate_type_id', '$username', 'DATE_ADD(NOW() + INTERVAL 1 HOUR)', '$quantity', 'purchase', 'active')");
我没有收到任何错误,只会插入"0000-00-00 00:00:00"
。我已尝试在phpmyadmin等中进行故障排除,但没有取得任何进展。
答案 0 :(得分:1)
您应该在date_add表达式中删除引号,并使用逗号而不是
statement = $pdo->prepare("INSERT INTO shipments
(crate_type_id, username, arrival, quantity, type, status)
VALUES ('$crate_type_id', '$username',
DATE_ADD(NOW() , INTERVAL 1 HOUR) ,
'$quantity', 'purchase', 'active')");
答案 1 :(得分:0)
首先,您错误地使用了PDO::prepare()
。该工具的整个目的是分离代码和数据,但是您将后者注入前者,就好像尚未发明预编译语句一样。手册中有几个例子,所以我不再重复,但简而言之,你必须:
?
或:foo
)其次,我建议您在严格模式下配置MySQL,这样就不会像0000-00-00 00:00:00
那样结束垃圾。您可以在连接上设置正确的SQL模式,例如:
SET @@SESSION.sql_mode='TRADITIONAL'
最后,您的最终SQL代码甚至可能无效,但显然您没有收到有关它的通知。我建议您在连接代码中添加以下内容:
$pdo = new PDO($dsn, $user, $pass, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
...并确保您已配置PHP开发框以显示所有错误。