[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を指定すると、エスケープが行われません。

スポンサーリンク


Comment