今日はDB更新用の関数を書いた。ポイントはINSERTでもUPDATEでも対応できるようにしたこと。新規か否かのフラグが必要だけど、結構いい出来になったと思う。それを作る上で手こずった点をいくつかリストアップ。
- オブジェクト内の変数を手っ取り早く取得するにはget_object_vars()を用いるべき。ただしこれはメンバ変数以外の関数内の変数もとってきてしまうことに注意。
- 上の問題を解決するために、登録先のテーブルのフィールド名を取得する必要がある。それにはpg_fetch_array()を用いた。間違って数字が入ってしまわないように、オプションにPGSQL_ASSOCをセット。
- オブジェクト内の変数名がテーブルのフィールド名の中にあったら初めて考慮するようにした。ある配列のキーになっているかどうかはarray_key_exists()を用いればよい。注意しなければいけないのが、isset()の場合は、そのキーを持っている変数がNULLの場合はFALSEを返してしまうので使えないという点。
- PostgreSQLではカラム名はすべて小文字で返ってくるので、比較するときは必ずオブジェクト内の変数名をstrtolower()で小文字にすること。
- 文字列を切り出すときはsubstrを使う。ここでstrlenとのコンボがなかなか使える。