2017-01-12 16 views
1

まず最初に、私はフレームワークが初めてです。私は、CIデータベースオブジェクトを使用してトランスクリプトにしようとしているクエリを確認してください。CodeIgniter - EXISTサブクエリのバインド

$where = "(".$this->tbl.".invoiceNumber = '".substr($searchFor,3)."' 
      OR EXISTS (SELECT 1 FROM op_orders_products WHERE idProduct = ".(is_numeric(substr($searchFor,3)) ? substr($searchFor,3) : '-1')." 
      AND idOrder = ".$this->tbl.".id) 
     )"; 

個別のサブクエリを行う必要がありますか?それをすべて一つにしたいと思います。

これは私のやり方です。私は、変数がバインドされ、元のクエリのように文字列として渡されていないことを確認したい。

$this->db->group_start() 
      ->where($this->tbl.".invoiceNumber", substr($searchFor, 3)) 
      ->or_group_start() 
      // I'm missing this EXISTS select subquery 
      ->group_end() 
     ->group_end() 

ありがとうございました。

答えて

0

私が知っているCodeigniterのQuery Builderクラスには、同等のEXISTSはありません。だから私はちょうどこのようにそれを記述します

$sql = "SELECT * FROM table WHERE a= ? AND b= ?"; 
$query = $this->db->query($sql, array($a,$b)); 

$this->db->group_start() 
      ->where($where) 
     ->group_end() 

は、あなたがこのようなクエリに変数をバインドすることができCodeIgniterの持つドキュメントhere

binding:

を見ますこれは、変数$ aと$ bをクエリ文字列内の対応する位置(?)にバインドします。

escaping

$this->db->escape() 

この関数は、文字列データをエスケープし、その周りに単一引用符を追加します。

+0

こんにちはVickel、私は変数を$ where節にバインドしたいと考えています。 – cabesd

+0

https://www.codeigniter.com/userguide3/database/queries.html#query-bindingsを参照してください。 – Vickel

関連する問題