kazpgmの日記

『プログラム自動作成@自動生成』作成の日記

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