[CodeIgniter3] クエリービルダーのINSERTでエスケープを行わない
スポンサーリンク
CodeIgniterのクエリービルダーでINSERTを行う場合、以下のように書くことが多いかと思います。
$data = array( 'columnA' => 'foo', 'columnB' => 'bar' ); $this->db->insert('table', $data );
こうすればCodeIgniterがデフォルトで備えているセキュリティ機能を利用でき、入力データのエスケープ処理なども行ってくれるのですね。
ところが、INSERT時に、入力文字列のエスケープを行ってほしくない場合もあります。
最近、BLOB型のデータを文字データで入力する必要があったのですが、この時CodeIgniterが文字列をエスケープ処理するため、うまく行かずに困ったのですね。$this->db->query('INSERT INTO table_name(address, tall) VALUES('foo', 'bar' )');
のように、SQL文を自前で書く場合でも同じように意図しないエスケープが行われてしまいます。
ではどうするか? というとsetメソッドを使います。
$this->db ->set('columnA', 'foo' ) ->set('columnB', 'bar', FALSE )// エスケープさせないデータ ->insert('table_name');
クエリービルダーのsetメソッドも通常はデータのエスケープが行われるのですが、第3引数にFALSE
を指定すると、エスケープが行われません。
スポンサーリンク
CodeIgniterカテゴリーの投稿
- [CodeIgniter3] CRONでコントローラーのメソッドを呼び出す
- [CodeIgniter3] さくらレンタルサーバー設置時の.htaccess
- [CodeIgniter3] ControllerとViewを作成
- [CodeIgniter3] xampp開発環境へのインストール
- [CodeIgniter2] サイトマップを作る
- [CodeIgniter2] form_open()のメソッドをGETにする
- [CodeIgniter2] 多言語化時にオートロードで任意言語ファイルを読み込む
- [CodeIgniter2] ActiveRecordクラスjoinメソッド
- [CodeIgniter2] アクティブレコードでReplace文を使う
- [CodeIgniter2] アクティブレコードで複雑なWHERE句を生成する