Datetime 的 NOW() 函数不适用于 PDO-MYSQL 准备好的语句?

问题描述 投票:0回答:4

我有一个数据库表

timetable
,其中有一个名为
DATETIME
created_on
字段。

created_on DATETIME,
notes VARCHAR(255) NOT NULL

我使用

NOW()
函数通过 PDO 准备好的语句插入当前时间。

INSERT INTO timetable(created_on, note)
VALUES(?, ?);

因此在绑定值并执行准备好的语句之后...

$notes ="This is a note...";
$values =array("NOW()", $notes);
$stm->execute($values);

...MySQL 表中的

notes
列写入预期数据,但
created_on
列产生...

0000-00-00 00:00:00 

我不想使用 Unix 纪元时间戳。那么如何让

DATETIME
函数中的
NOW()
发挥作用呢?

php mysql pdo prepared-statement
4个回答
10
投票

不要将

NOW()
作为参数传递,

INSERT INTO timetable(created_on, note) VALUES(NOW(), ?);

所以您只需要装订笔记即可。

$values =array($notes);

2
投票

您将

NOW()
作为字符串传递,而不是 mysql 表达式。

这样使用:

INSERT INTO timetable(created_on, note)
VALUES(now(), ?);

1
投票

关键字NOW()是MySQL保留变量,需要进入SQL定义,不能绑定。所有 SQL 关键字(SELECT、FROM、WHERE、列名等)都不能绑定,需要进入 SQL 声明。


0
投票

就我而言,我正在动态构建查询。它试图添加

'current_timestamp()'
作为值。

由于无法删除引号,因此我将其更改为不在插入方法中添加此参数:

$params = ...; // this return the composition of the table

$fieldNames = array();
$fieldValues = array();

foreach($params as $type => $value) {
    if($type == "datetime" && (!isset($data[$value["Field"]]) || $data[$value["Field"]] == null) && $value["Default"] != null) {
         // ignore
         continue;
    }
    array_push($fieldNames, $value['Field']);
    array_push($fieldValues, $value['Field']);
}
$fieldNames = implode(',', $fieldNames);
$fieldValues = ':'.implode(', :', $fieldValues);
$stmt = $this->prepare("INSERT INTO ".$table." ($fieldNames) VALUES ($fieldValues)");

如果它是一个没有值但mysql有的日期时间,它不会添加它(在本例中是在插入中)并让mysql处理它。

© www.soinside.com 2019 - 2024. All rights reserved.