首页 > 解决方案 > PHP:试图在数据库中插入日期

问题描述

我想将开始日期和结束日期之间的所有日期插入数据库中的表中。

我已经找到了两个日期和.

现在的问题是运行代码时日期没有插入到我的数据库中。仅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();
}

标签: phpsqldatepdo

解决方案


您忘记用单引号将 SQL 中的日期值括起来。因此 SQL 引擎试图将您的输入视为数字,但它不能(因为显然日期不是有效数字)。

但是无论如何,您都不应该将原始数据包含在您的查询中。使用参数可以大大降低您犯此类简单语法错误的可能性(以及在处理外部数据输入时保护您的数据免受 SQL 注入)。

$statement = $pdo->prepare("INSERT INTO table (date) VALUES (:newdate)");
$statement->bindParam(':newdate', $newdate);
$statement->execute();

有关使用准备好的语句,请参阅PHP 手册

PS 如果您的代码由于 SQL 错误而引发错误,除非您在创建连接时打开了 PDO 异常处理,否则您可能看不到它。


推荐阅读