7

Null 可能なフィールドがいくつかあるテーブルがあり、ユーザーが HTML フォーム フィールドに何も入力しない場合、空の文字列ではなく NULL をそのフィールドに挿入したい (これらのテーブルの SELECT の一部が後で次のような条件を使用するため、これは重要です)。 WHERE x IS NOT NULL として)。

ただし、このバージョンの bindParam コードは、NULL の代わりに空の文字列を null 許容フィールドに挿入します。

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

私はかなり読んでいて、これが代わりにフィールドに null を挿入する答えであることがわかりました:

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

ただし、これは、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 に答える