kazpgmの日記

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

TOOL更新_DbManager.php(次バージョン)でnull設定時の作成SQLが間違っていた。

TOOL更新_DbManager.php(次バージョン)でnull設定時の作成SQLが間違っていた。(nullにならずに''になっていた。)
■DbManager.php 修正
パラメータがnullのときの作成SQLが間違っていた。ので修正した。
<<修正前>>

/**
 * SQL文に値配列を埋め込んでquote処理する。<br>
 * @param    $sql    SQL文。値の置換文字は?で指定する。
 * @param    $ary    値の配列。
 * @return           値を埋めこんだSQL文
 */
protected function _sqlAndValQuote(&$sql, &$ary=array()) {
    $sqls = preg_split("/(\?)/", $sql, -1, PREG_SPLIT_DELIM_CAPTURE ); // ”?”で分割。”?”も配列に含める。
    $i = 0;
    foreach((array)$sqls as $key => $sqlValue) {
        if ($sqlValue == "?") { // ”?”の場合
            $sqls[$key] = $this->_db->quote($ary[$i]); // 値埋め込む。
            $i++;
        }
    }
    $rtnSql = join('', $sqls); // 値を埋めこんだSQL文。
    return $rtnSql;
}

<<修正後>> オブジェクトがnullのときは ”item = ? " −> ”item = null " となるようにした。

/**
 * SQL文に値配列を埋め込んでquote処理する。<br>
 * @param    $sql    SQL文。値の置換文字は?で指定する。
 * @param    $ary    値の配列。
 * @return           値を埋めこんだSQL文
 */
protected function _sqlAndValQuote(&$sql, &$ary=array()) {
    $sqls = preg_split("/(\?)/", $sql, -1, PREG_SPLIT_DELIM_CAPTURE ); // ”?”で分割。”?”も配列に含める。
    $i = 0;
    foreach((array)$sqls as $key => $sqlValue) {
        if ($sqlValue == "?") { // ”?”の場合
            if (is_null($ary[$i])) {
                $sqls[$key] = 'null'; // 値埋め込む。
            } else {
                $sqls[$key] = $this->_db->quote($ary[$i]); // 値埋め込む。
            }
            $i++;
        }
    }
    $rtnSql = join('', $sqls); // 値を埋めこんだSQL文。
    return $rtnSql;
}

1.過去のブログの記述箇所を直接修正した。

 http://d.hatena.ne.jp/kazpgm/20100531/1275325328(TOOL更新_DbManagerの中ですべての値をQuoteする。prepare statementみたいなロジックにする。)のDbManager.phpソース書き換えた。

 http://d.hatena.ne.jp/kazpgm/20100309/1268152282(TOOL更新_DBマネージャクラス。うごいたので。ここに更新する。)のDbManager.phpソース書き換えた。

2.自WEBの修正日を書き換えた

■DBマネージャクラス(シングルトン)を作った。 更新日=2010/08/09 −> 更新日=2010/10/21

10/20 1:30-3:30 10/21 20:30-23:00 テストしていたら、日付にnullを設定しているのに”0000/00/00”が入ってしまってた。何のことはないオブジェクトがnullのとき ”item = ? " −> ”item = '' "になっていた。