[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句を生成する