CodeIgniter-Abfrage-Builder mit separaten ODER-LIKE-Bedingungen UND einer Nicht-LIKE-Bedingung [Duplikat]Php

PHP-Programmierer chatten hier
Anonymous
 CodeIgniter-Abfrage-Builder mit separaten ODER-LIKE-Bedingungen UND einer Nicht-LIKE-Bedingung [Duplikat]

Post by Anonymous »

Ich habe eine Abfrage mit Klammern, um die Logik zu kapseln:

Code: Select all

SELECT *
FROM users
WHERE company_id = 1 AND (
name LIKE "%smith%" OR
last_name LIKE "%smith%"
)
Aber in CodeIgniter habe ich:

Code: Select all

$query_members = $this->db
->select('users.*')
->from('users')
->like(array('users.names' => $search))
->or_like(array('users.last_name' => $search))
->where(array('users.company_id' => 1));
Dies erzeugt:

Code: Select all

SELECT *
FROM users
WHERE
name LIKE '%smith%' OR
last_name LIKE '%smith%' AND
company_id = 1;
Und funktioniert nicht, ich brauche ((a oder b) und c), nicht (a oder b und c).
Ich habe hier eine Lösung gefunden: Kapseln Sie eine dynamische Anzahl von OR LIKE-Bedingungen mit Klammern mithilfe der aktiven Datensatzmethoden von CodeIgniter, aber die Variable wird mit vollständigen Anführungszeichen maskiert. Ich muss mehrere LIKE-Bedingungen mit Platzhaltern und Wertanführungszeichen implementieren. Ich habe das:

Code: Select all

$search_escaped = $this->db->escape($search);
$query_members = $this->db
->select('users.*')
->from('users')
->where('(users.names LIKE "%'.$search_escaped.'%" OR users.last_name LIKE "%'.$search_escaped.'%")')
->where(array('members.company_id' => (int)$company_id));
Aber die Abfrage fügt fehlerhafte Anführungszeichen hinzu:

Code: Select all

SELECT `users`.*
FROM `users`
WHERE (users.names LIKE "%'smith'%" OR users.last_name LIKE "%'smith'%")
AND `members`.`company_id` = 2
Der „%'smith'%“ ist schlecht zitiert. Wie kann ich dieses Problem mithilfe der Abfrage-Builder-Methoden von CodeIgniter 3.0.0 lösen?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post