我正在使用MDB2的预处理语句,并且与documentation有点混淆,特别是处理MySQL内置函数,如NOW()或CURDATE()。
$ data中传递的值必须是文字。不要提交SQL 函数(例如CURDATE())。应该是的SQL函数 在执行时执行需要放在准备好的声明中。 类似地,标识符(即表名和列名)不能 之所以使用,是因为在准备阶段会对名称进行验证。
所以文档说要在准备好的语句中包含这些函数,但我不确定如何考虑字段名。例如,如果我有一个包含五列的表:
ID 姓 名字 性别 dateadded
我想插入一行只有第一个,最后一个和日期添加...我可能会使用像
这样的东西INSERT INTO mytable (firstname,lastname,dateadded) VALUES('jane','doe',NOW())
如果不是日期添加栏,我会使用类似的内容:
$types = array(
'text',
'text'
);
$sth = $mdb2->prepare('
INSERT INTO
mytable
VALUES
(
:firstname,
:lastname
)', $types);
$data = array(
'firstname' => 'Jane',
'lastname' => 'Doe'
);
$affectedRows = $sth->execute($data);
那么 - 就列出字段名,我如何解释MySQL函数?或者我是否需要计划为表中的每个字段插入值?
答案 0 :(得分:1)
我不明白你的问题 为什么不直接将NOW()添加到预准备语句中呢?
$sql = 'INSERT INTO mytable ( lastname, firstname, dateadded)
VALUES (:firstname, :lastname, NOW())';
$sth = $mdb2->prepare($sql, $types);