我有一个函数,可以从一个数据库读取数据,格式化并重新组合它们,然后将它们插入到另一个数据库中。但是,目标数据库应拒绝某些列缺少数据的任何行。我想要做到这一点的方法是在目标表中的相关列上放置 NOT NULL 约束,以便当这些值为 NULL 时 INSERT 语句不会被执行。
但是,在内爆格式化的源数据数组时,我对每个值都使用引号,以便能够立即将它们与 sql INSERT 字符串的其余部分连接起来。我原本计划使用 PDO::ATTR_ORACLE_NULLS 属性在 INSERT 上将所有空字符串(源数据中的 NULL)转换为 NULL,但现在发现这似乎只影响 SELECT 查询的结果,而不影响 INSERT 语句。有谁知道一种优雅而快速的方法来告诉 MySQL 或 PDO 对象将 INSERT 语句中的所有空字符串视为 NULL?
最佳答案
Oracle 将空字符串视为 NULL。这不是 MySQL 所做的事情。你可以做array_map(function ($element) { return $element ? $element : NULL; }, $arguments);
然而,在传递给 PDO 之前要进行替换。 (或 $element === '' ? NULL : $element
取决于您想要如何处理 0
和 '0'
)
关于php - INSERT 语句是否有等效的 PDO::ATTR_ORACLE_NULLS ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8340473/