TOOL更新_昨日作ったDBマネージャクラス。に、置き換えている。Zend_DBにaffectedRowsメソッドない。
TOOL更新_昨日作ったDBマネージャクラス。に、置き換えている。Zend_DBにpearにあるaffectedRowsメソッドがない。以下のように
■LogininfoUtil.php http://d.hatena.ne.jp/kazpgm/20100121/1264095498を修正した。
・pearのDB.phpで削除した後で、削除した件数を聞いて0件なら削除できなかったと判断する。というロジックを組んである(Ver0.1)。今回Zend_DBを使うように変更しているので、DBマネージャクラスのdbDeleteメソッドから更新件数を返すように修正する。(「■ここを修正した」参照)
// 削除実行 public function delDoTbl($db, &$o) { $sql = 'begin'; $db->dbQuery($sql); // ■ここを修正した start $rtn = $db->dbDelete('m_logininfo', array('login_id = '. $db->dbQuote( $o['login_id'] ) )); if (1 > $rtn) { // 更新なしの場合 //$db->dbDelete('m_logininfo', array('login_id = '. $db->dbQuote( $o['login_id'] ) )); //if (1 > $db->affectedRows()) { // 更新なしの場合 // ■ここを修正した end $sql = 'commit'; $db->dbQuery($sql); return '指定されたログイン情報は削除されています。' . ' ログインID=' . $o['login_id'] ; // 削除されている } $sql = 'commit'; $db->dbQuery($sql); }
■「DbManager.php」(DBマネージャクラス) http://d.hatena.ne.jp/kazpgm/20100309/1268152282を修正した。
・DBmanagerではdeleteもquaryメソッドで処理している。(以下参照)queryメソッドは「Zend_Db_Statement_Pdo Object」(PDOStatement)を戻してくる。これから更新件数が取れる「rowCount()」メソッドで。以下が修正内容。insertとupdateも変更した。(「■ここを修正した」参照)
// DELETE処理 public function dbDelete($tableName, $conditions = array()) { $sqlWhere = $conditions; $sql = 'DELETE FROM ' . $tableName; if($sqlWhere) { $sql .= ' WHERE ' . join(' AND ', (array)$sqlWhere); } $this->_outSqlLog($sql, 'dbDelete'); // ■ここを修正した start return $this->_db->query($sql)->rowCount(); //return $this->_db->query($sql); // ■ここを修正した end }
余談:「$rows_affected = $db->delete($table, $where);」を使えば戻り値が更新件数になるのだけど、今回DBマネージャでは、自前のSQLログを出している。このSQLを使わないとダメ。使わないと、意味のないSQLログになってしまう。
3/11 20:30-02:00