Kenji Suzuki
kenji****@gmail*****
2011年 7月 1日 (金) 13:42:23 JST
Kenji です。 On Fri, 1 Jul 2011 13:15:12 +0900 lain_gmail <masao****@gmail*****> wrote: > ガレリアといいます。 > > SQLでのエスケープでまだ理解できていない部分があるのですが > > *$this->db->escape()* > と > mysql_real_escape_string() > > は同等の処理と考えていいのでしょうか?* データベースドライバが mysql であるなら、部分的にはそうですね。 http://codeigniter.jp/user_guide_ja/database/queries.html 実際には、以下のようなコードになっています。 system/database/DB_driver.php: /** * "Smart" Escape String * * Escapes data based on type * Sets boolean and null types * * @access public * @param string * @return mixed */ function escape($str) { if (is_string($str)) { $str = "'".$this->escape_str($str)."'"; } elseif (is_bool($str)) { $str = ($str === FALSE) ? 0 : 1; } elseif (is_null($str)) { $str = 'NULL'; } return $str; } system/database/drivers/mysql/mysql_driver.php: /** * Escape String * * @access public * @param string * @param bool whether or not the string will be used in a LIKE condition * @return string */ function escape_str($str, $like = FALSE) { if (is_array($str)) { foreach ($str as $key => $val) { $str[$key] = $this->escape_str($val, $like); } return $str; } if (function_exists('mysql_real_escape_string') AND is_resource($this->conn_id)) { $str = mysql_real_escape_string($str, $this->conn_id); } elseif (function_exists('mysql_escape_string')) { $str = mysql_escape_string($str); } else { $str = addslashes($str); } // escape LIKE condition wildcards if ($like === TRUE) { $str = str_replace(array('%', '_'), array('\\%', '\\_'), $str); } return $str; } // Kenji