2017-05-09 28 views
0

私はそうのように、クエリへの参加を挿入しようとしています:CodeIgniterのエスケープ文字列

$this->db->join(
"(SELECT DISTINCT(fo.Order_ID) 
FROM order fo 
INNER JOIN order_item foi ON fo.Order_ID = foi.Order_ID 
INNER JOIN product_group fpg ON fpg.Product_ID = foi.Product_ID 
INNER JOIN group fg ON fg.Group_ID = fpg.Group_ID 
WHERE Group_Name IN". $groups.")G", 
'G.Order_ID = o.Order_ID', 
'inner'); 

$groupsは配列で、私は$this->db->where_in()を使用することはできませんから、私はそれをエスケープ:

$groups = array_map(function($group){return $this->db->escape($group);}, $groups); 
$groups = '(' . implode(',', $groups).')'; 

これはほとんどの入力でうまく動作しますが、実際には文字列をエスケープしていないようです。ある

Unclosed quotation mark after the character string 'NULL!' 

とクエリの関連(速報)一部:

WHERE Group_Name IN('^*&','NULL! 

がどのように適切に配列を処理しない例えば 、 $groups = array('^*&', '?!?')場合は、データベースでエラーが発生しますか?

答えて

0

の部分文字列生成すべき

WHERE Group_Name IN". $groups.")G",

$groups is an array

$groups = array('^*&', '?!?');

次いで

$this->db->join(" 
... 
... 
WHERE Group_Name IN ('".join("','" , $groups)."')G", 
.... 

場合:

WHERE Group_Name IN ('^*&','?!?')G", 
関連する問題