如何在预准备语句中使用文字?

时间:2014-02-22 13:38:27

标签: php mysql pdo

在MySQL中有DEFAULT关键字,让数据库知道它应该只使用列定义的默认值:

  

使用关键字DEFAULT将列显式设置为其默认值   值。这使得编写分配的INSERT语句变得更容易   除了几列之外的所有值,因为它可以让您避免   写一个不包含值的不完整的VALUES列表   表格中的每一列。否则,你必须写出来   与VALUES列表中的每个值对应的列名列表。

理论上,这对于准备好的INSERT语句很好。问题是,PHP doesn't seem to have是一种将?占位符与DEFAULT关键字绑定的方式,就像NULLPDO::PARAM_NULL)一样。那么如何实现一个完全通用的,因此可重用,准备好的语句,其中一些参数应该在某些时候接受默认值(事先不知道它)?

我目前正在开发一个瘦数据库模型层,这使我无法充分利用预处理语句,如果你想将它用于大量插入,这就是一件事。

1 个答案:

答案 0 :(得分:0)

只需从INSERT语句中删除要使用默认值填充的列,明确指定执行的列名放置非必需的默认值。

编辑:如果你想要一个“完全通用的,可重复使用的,准备好的声明”,你就无法拥有它。与您提出的问题最接近的是以下解决方法:

INSERT INTO TABLE theTable (column1, column2, column3) VALUES
    (COALESCE(?,DEFAULT(column1)),
    (COALESCE(?,DEFAULT(column2)),
    (COALESCE(?,DEFAULT(column3)))

这种方法意味着您在需要DEFAULT时传递NULL,但部分满足您的要求,因为列的名称已修复。