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 = '' "になっていた。