DBAL :在数据库中保存日期时间


DBAL : save DateTime in DB

我正在尝试将DatTime对象保存在MySQL DB中。插入时,我有此错误:

"使用参数执行 'INSERT INTO 事件 (name_event、desc_event、minimalPrice_event、startDate_event、endDate_event、startHour_event、endHour_event、num_ET) 值 (?, ?, ?, ?, ?, ?, ?, ?)' 时发生异常 ["rfreger", "gregregerg", 44, {"date":"2011-01-01 00:00:00","timezone_type":3,"时区":"欧洲/巴黎"}, 假, 假, 假, 2]: 可捕获的致命错误: 类的对象 日期时间无法转换为字符串"

我不明白为什么该方法尝试将日期时间对象转换为字符串

如何解决这个问题?

public function save(Event $event) {
    $eventData = array(
        'name_event' => $event->getName(),
        'desc_event' => $event->getDesc(),
        'minimalPrice_event' => $event->getMinimalPrice(),
        'startDate_event' => $event->getStartDate(),
        'endDate_event' => $event->getEndDate(),
        'startHour_event' => $event->getStartHour(),
        'endHour_event' => $event->getEndHour(),
        'num_ET' => $event->getType()
        );
    if ($event->getNum()) {
        // The event has already been saved : update it
        $this->getDb()->update('event', $eventData, array('num_event' => $event->getNum()));
    } else {
        // The event has never been saved : insert it
        $this->getDb()->insert('event', $eventData);
        // Get the id of the newly created event and set it on the entity.
        $id = $this->getDb()->lastInsertId();
        $event->setNum($id);
    }
}

使用MySQL,首先创建一个称为SQL语句的字符串,然后将其发送到数据库执行。您的代码创建的 SQL 语句大致如下:

INSERT INTO event (name_event, desc_event, minimalPrice_event, startDate_event, endDate_event, startHour_event, endHour_event, num_ET) VALUES (?, ?, ?, ?, ?, ?, ?, ?)

在 php 中,您可以将字符串连接在一起以创建一个更长的字符串,如下所示:

$stringFinal = $stringA."other string".$stringB.$number4;

你甚至可以在那里添加数字。但是,某些数据类型不会转换为字符串。数组就是一个很好的例子。如果您有以下数组:

$myArray = array (
  [0] => 4,
  [44] => 'hello'
)

如果您尝试使用以下代码制作字符串:

$myString = "hello".$myArray;

运行脚本的服务器将完全混淆,因为它不是为将数组转换为字符串而设计的。

所以回答你的疑问:

我不明白为什么该方法尝试转换日期时间对象 到字符串

它需要是一个字符串,因为这是数据库在首次查询 SQL 命令时读取的格式。

出现错误的原因是,您正在传递一个变量(或多个变量)以插入到数据库中的代码中,而该变量无法转换为字符串。

我希望这有所帮助!