[Codeigniter-users] SQLのエスケープ処理について

Back to archive index

lain_gmail masao****@gmail*****
2011年 7月 5日 (火) 11:39:59 JST


kenji 様

ご回答いただきありがとうございます。
元々使いまわしているエスケープ関数がありましたので、CodeIgniterでの動作が気になって質問させていただきました。
同じということであれば他のフレームワークと違い、CodeIgniterは作法も緩いのでその場に併せて適宜利用していきたいと思います。

2011年7月1日13:42 Kenji Suzuki <kenji****@gmail*****>:

> 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
>
> _______________________________________________
> Codeigniter-users mailing list
> Codei****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users
>
-------------- next part --------------
HTMLの添付ファイルを保管しました...
Download 



Codeigniter-users メーリングリストの案内
Back to archive index