2010-09-19 5 views
8

Ich möchte eine Abfrage wie folgt auszuführen:Wie verwendet man eine LIKE-Abfrage mit CodeIgniter?

SELECT * FROM table WHERE field LIKE '%search_term%' 

In CI Sie können Parameter auf Anfragen binden, wenn Sie field=? verwendet, aber das funktioniert nicht für field LIKE "%?%". Von der Debugging-Ausgabe scheint die verwendete Abfrage field LIKE "%'search'%" zu sein.

Gibt es eine alternative Möglichkeit, in CodeIgniter zu suchen?

Antwort

16

können Sie diese Abfrage verwenden:

SELECT * FROM table WHERE field LIKE ? 

und binden mit %search% statt search.

Sie sollten wissen, dass diese Abfrage in MySQL langsam ist. Möglicherweise möchten Sie stattdessen die Freitextsuche (Lucene, Sphinx oder die integrierte Freitextsuche von MySQL) verwenden.

+0

Danke, das funktioniert. Dies ist nicht für einen Großteil meines Skripts, also ist die Geschwindigkeit kein Problem. – DisgruntledGoat

+0

Vielen Dank für die MySQL-Freitext-Referenz! –

0

, was ich kann verstehen, CI Anführungszeichen hinzufügen, übergeben false als dritter Parameter während Bindung CI Zugabe von Anführungszeichen zu verhindern.

2

ist diese aktive Datensatzklasse für codeigniter

$this->db->select('*'); 
$this->db->like('columnname','both'); 
$query=$this->db->get("tablesname"); 
$result=$query->result_array(); 
if(count($result)) 
{ 
return $result; 
} 
else 
{ 
return FALSE; 
} 

Sie sollten versuchen, ihre Hilfe this..I denken Sie .. beide bedeutet% column%, vor Mittel% column, nach Mittel COLUMN%

1
$search_term=$this->input->post('textboxName'); 
$search_term="%".$search_term."%"; 
$sql="SELECT * FROM table WHERE field LIKE ? "; 
$query=$this->db->query($sql,array($search_term)); 
$res=$query->result(); 
+0

Dies wurde bereits vor 7 Jahren beantwortet. – DisgruntledGoat

+0

ja. Es ist eine Antwort für eine Situation, in der String in Like-Klausel ist. Aber ich hatte Probleme mit einer Abfrage, deren Variable in der Like-Klausel war. Es funktioniert nicht, wenn Sie es als% variable_name% definieren. Ich habe eine Lösung gefunden. Deshalb habe ich geantwortet. –