2017-01-12 2 views
1

Zunächst bin ich neu im Framework. Überprüfen Sie die Abfrage, die ich versuche, mit dem CI-Datenbankobjekt zu transkribieren.CodeIgniter - Binden einer EXIST-Unterabfrage

$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) 
     )"; 

Sollte ich eine separate Unterabfrage machen? Möchte alles in einem machen.

So habe ich angefangen. Ich möchte sicherstellen, dass die Variablen binded und nicht als Zeichenfolgen wie in der ursprünglichen Abfrage übergeben werden.

$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() 

Vielen Dank für die Hilfe.

Antwort

0

Es gibt kein EXISTEN Äquivalent in der mir bekannten Code Generator Query Builder Klasse. Also würde ich schreiben Sie einfach es wie folgt aus:

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

siehe Dokumentation here

binding:

mit CodeIgniter Sie Variablen auf Ihre Frage, wie diese binden können:

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

Dies bindet die Variablen $ a und $ b an die entsprechenden Positionen (?) In der Abfragezeichenfolge.

escaping

$this->db->escape() 

diese Funktion entgeht Datenfolge und fügt um es einfache Anführungszeichen.

+0

Hallo Vickel, aus Sicherheitsgründen möchte ich meine Variablen in der $ Where-Klausel binden. – cabesd

+0

siehe https://www.codeigniter.com/userguide3/database/queries.html#query-bindings – Vickel

Verwandte Themen