2012-01-29 9 views
4

私はPHP PDOをPostgresqlバックエンドとともに使用しています。私はいくつかのnullableフィールドを持っているテーブルを持っていて、ユーザーがHTMLフォームフィールドに何も入力しなかった場合、空の文字列ではなく、そのフィールドにNULLを挿入したい(これは後でこれらのテーブルのSELECT WHERE xはNULLではありません)。PHP PDOが空のpotsgresqlではなくNULLを挿入します

ただし、このバージョンのbindParamコードは空の文字列をNULLではなくnullのフィールドに挿入します。

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

私はかなりのビットを読み出すと、これが代わりにフィールドにnullを挿入するための答えであることを考え出してきた:

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

が、これは私がすべてのパラメータを事前にチェックする必要があることを意味しています空であるかどうかを判断するためにヌル入力可能なフィールドに渡されている場合は、PDO_PARAM_STRの代わりにPDO :: PARAM_NULLを渡します。もちろんこれを行うことはできますが、空の文字列に遭遇するかどうかをPDOに伝える設定があることを期待していました。代わりにnullを挿入します。

私はこの

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

に出くわしますが、効果はありませんし、今後の研究で、私はこれが唯一で出て途中ではなく、途中で記録に影響を与え思っています。

に他の任意のオプションを変数を事前にチェックするよりも?

おかげ アーロン

答えて

6

あなたがnullの場合は、単にnull代わりに空の文字列を挿入します。

$stmt2->bindParam(':title', $title === '' ? null : $title, PDO::PARAM_STR); 
+0

ありがとう、これは私の顔を見て明らかだった(木の森を見ることができない....) – Alpaus

1

xdazzのより適切な答えだけでなく、あなたは、多くの場合、SQLでこのような何かを解決することができます:ちょうどINSERT INTO ... VALUES (NULLIF(?, ''))のようなものにクエリーINSERT INTO ... VALUES (?)を修正してください。