2005年06月28日(火) [長年日記]
■ [php] DB_DataObjectでwhereAdd()してupdate()
DB_DataObject 1.7.13で、
UPDATE person SET removed=1 WHERE age = 21
のようなSQLを実行しようとして
$person = DB_DataObject::factory('person'); $person->whereAdd('age = 21'); $person->removed=1; $person->update();
のようなコードを書いたときに、UPDATEが実行される場合とされない場合があった。
どうも、ageがpersonテーブルの主キーであれば動くがそうでない場合は動かないようだ。
動かない場合のエラーを調べると、
DB_DataObject Error: update: trying to perform an update without the key set, and argument to update is not DB_DATAOBJECT_WHEREADD_ONLY
と出力された。これだけではよく分からなかったが、DataObject.phpを見るとupdate()のコメントに「@param object dataobject (optional) | DB_DATAOBJECT_WHEREADD_ONLY - used to only update changed items.」とあったので、update()を呼ぶ所を
$person->update(DB_DATAOBJECT_WHEREADD_ONLY);
のようにしてみたらUPDATEが実行された。
マニュアルにはDB_DATAOBJECT_WHEREADD_ONLYのこと書かれてないなあ。
■ [php] DB_DataObjectでのエラーの調べ方
全然分からなかったんだけど、Linuxを使ってみるに、
$user = DB_DataObject::factory("m_user"); if (PEAR::isError($user->_lastError)) { $reason = $user->_lastError->getMessage(); return; }
という方法が書かれていたのでこれを真似したらできた。
■ やること
- オーブンレンジ用べんり棚
- ブラウンの安い電動歯ブラシ買う
- 蛍光灯を捨てる
- 家賃
- 健康保険料
- 税務署