7

我有一个表,其中包含一些可为空的字段,当用户在 HTML 表单字段中没有输入任何内容时,我想在该字段中插入 NULL,而不是空字符串(这很重要,因为我在这些表上的一些 SELECT 稍后使用条件,例如如 WHERE x 不为空)。

但是,此版本的 bindParam 代码将空字符串插入可空字段而不是 NULL。

$stmt2->bindParam(':title', $title, PDO::PARAM_STR);

我已经阅读了很多内容,并发现这是将 null 插入该字段的答案:

$stmt2->bindParam(':title', $title, PDO::PARAM_NULL);

但这意味着我需要预先检查所有传递给可空字段的参数,以确定它们是否为空,如果是,则传递PDO::PARAM_NULL而不是PDO::PARAM_STR. 我当然可以这样做,但希望可能有一个设置,如果它遇到一个空字符串,它会告诉 PDO,而是插入 null。

我偶然发现了这个

$this->dbh->setAttribute(PDO::ATTR_ORACLE_NULLS, PDO::NULL_EMPTY_STRING);

但它没有任何效果,通过进一步的研究,我认为这只会影响出路时的记录,而不是进路时的记录。

除了预先检查变量之外的任何选项?

4

2 回答 2

8

如果你想要 null,只需插入null而不是空字符串。

$stmt2->bindParam(':title', $title === '' ? null : $title, PDO::PARAM_STR);
于 2012-01-29T07:07:57.343 回答
2

除了 xdazz 更合适的答案外,您通常可以在 SQL 中解决类似的问题:只需将查询改写INSERT INTO ... VALUES (?)INSERT INTO ... VALUES (NULLIF(?, '')).

于 2012-01-29T11:13:26.407 回答