【发布时间】:2021-07-27 14:36:14
【问题描述】:
我想将开始日期和结束日期之间的所有日期插入到我数据库中的表中。
我已经找到two dates and the dates between 的代码。
现在的问题是运行代码时日期没有插入到我的数据库中。我的日期表中只显示0000-00-00。
运行代码时也没有出现错误消息,所以我不知道我在哪里犯了错误。有人可以帮我解决这个问题吗?
这是我的代码:
$begin = new DateTime('2010-05-01');
$end = new DateTime('2010-05-10');
$interval = DateInterval::createFromDateString('1 day');
$period = new DatePeriod($begin, $interval, $end);
foreach ($period as $dt)
{
$newdate = $dt->format("Y-m-d ");
$statement = $pdo->prepare("INSERT INTO table (date) VALUES ($newdate)");
$statement->execute();
}
【问题讨论】:
-
这不是使用准备好的语句的方式。请看:php.net/manual/en/pdo.prepared-statements.php
-
对准备好的语句使用适当的值绑定,如 KIKO 所述。即使您想在没有占位符的情况下进行此操作,也应像
"INSERT INTO table (date) VALUES ('$newdate')"一样引用日期值,如果您要正确使用绑定,则需要像"INSERT INTO table (date) VALUES (:newdate)"那样取消引用占位符 -
这能回答你的问题吗? SQL date format and quoting confusion
-
@biesior 这是有用的背景阅读,但恕我直言,它并没有直接复制它,因为参数化是 PHP 上下文中更好的全面解决方案 :-)
-
@ADyson 当然,这是一个更好的选择,但在提到的代码中,严格的问题是缺少引号,在这种情况下,准备语句不是必需的,因为我们不能期望从 DateTime 对象注入 SQL ;)