【问题标题】:Is there a PDO::ATTR_ORACLE_NULLS equivalent for INSERT statements?是否有与 INSERT 语句等效的 PDO::ATTR_ORACLE_NULLS ?
【发布时间】:2012-01-10 13:07:00
【问题描述】:

我有一个函数可以从一个数据库中读取数据,格式化并重新组合它们,然后将它们插入另一个数据库。但是,目标数据库应拒绝某些列缺少数据的任何行。我想这样做的方法是在目标表中的相关列上设置 NOT NULL 约束,这样当这些值为 NULL 时,INSERT 语句就不会被执行。

但是,在对格式化的源数据数组进行内爆时,我在每个值上都使用引号,以便能够立即将它们与 sql INSERT 字符串的其余部分连接起来。我计划在 INSERT 上使用 PDO::ATTR_ORACLE_NULLS 属性将所有空字符串(源数据中的 NULL)转换为 NULL,但现在事实证明这似乎只影响 SELECT 查询的结果,而不是 INSERT 语句。有没有人知道一种优雅而快速的方法来告诉 MySQL 或 PDO 对象将 INSERT 语句中的所有空字符串都视为 NULL?

【问题讨论】:

    标签: php mysql insert null pdo


    【解决方案1】:

    Oracle 将空字符串视为 NULL。这不是 MySQL 所做的。但是,您可以在传递给 PDO 之前执行 array_map(function ($element) { return $element ? $element : NULL; }, $arguments); 替换。 (或$element === '' ? NULL : $element,取决于您要如何处理0'0'

    【讨论】:

    • 这将是我的解决方法,以防万一它确实无法完成,但在这种情况下,我必须将我的 implode('\", \"',$values) 替换为一个不太优雅的 foreach 或 while 循环,以避免我的 NULL 值变成“null”字符串。
    猜你喜欢
    • 2017-04-15
    • 2022-06-30
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-20
    • 2023-04-03
    • 2010-11-27
    • 1970-01-01
    相关资源
    最近更新 更多