2010-11-25 9 views
0

Ich bin nicht sicher, was die beste Methode ist es, eine DB-Abfrage (oder das, was der Unterschied ist, was das betrifft) zwischen auszuführen:codeigniter beste DB Abfragemethode & Injection Prävention

$this->db 
->select('*') 
->from('table'); 
$this->db->get(); 

und

$this->db->query($sql); 

Ich fand, dass ich die Klasse get() brauche, weil ich Paginierung haben muss, und das wird für Begrenzer benötigt .... aber vielleicht ermöglicht der andere auch die Paginierung?

der zweite Teil über SQL-Injektionen ist das gut genug? wenn nicht was ist?

$this->db 
    ->select('*') 
    ->from('table'); 
    $this->db->get(); 
->where('id >'.$this->db->escape(1)); 

danke.

+0

Gibt es einen Grund, warum Sie die rohe Datenbank anstelle von ActiveRecord auf Ihren Modellen verwenden? – prodigitalson

+0

Ja meine Ignoranz :) Könnten Sie bitte mehr ausarbeiten, ich bin neu in codeigniter, bisher habe ich nur blind versucht, was Tutorials vorschlagen – salmane

+0

Actuall ich benutze CI nicht, also habe ich mich geirrt. Das ist eine AR-Nutzung. Die IT war mir trügerisch, weil ich ORM-Implementierungen von Doktrin und Propellern verwendete. Siehe meine Antwort unten für eine kurze Erklärung, aber ich bin sicher, dass jemand, der tatsächlich CI verwendet, eine definitive und nützliche Antwort geben wird :-) – prodigitalson

Antwort

0

Daher verwenden die meisten Frameworks, die eine Datenzugriffsebene und/oder ORM implementieren, eine vorbereitete Anweisung. Für die meisten einfachen Abfragen, wenn Sie diese Schnittstelle verwenden, wird das DAL/ORM für Sie entgehen. Zum Beispiel:

$this->db->get_where('mytable', array('id' => $id), $limit, $offset); 

Mit dieser Methode wird die Variablen in dem Array (array('column_name' => volumn_value')) Argument, um die Abfrage durchzuführen binden und auf sie entweicht.

Oder mit Ihrem Beispiel:

$this->db 
    ->select('*') 
    ->from('table') 
    ->where('id ', 1)->get(); 

prüfen Sie die Dokumentationen sollten sie im Detail erklären helfen: http://codeigniter.com/user_guide/database/active_record.html

1

Der folgende Code implementiert die Active Bibliothek in CodeIgniter (obwohl Active bezieht sich in der Regel auf eine ziemlich unterschiedliche Möglichkeit, Werte aus einer Datenbank zu erhalten).

$this->db 
->select('*') 
->from('table'); 
$this->db->get(); 

rechts, bis die Methode get(), wird Active intern eine SQL-Abfrage erstellen und speichern, und dann, wenn Sie get() aufrufen, dass die Abfrage ausführen, und ersetzen Sie es mit einem Ergebnisobjekt, die Sie anschließend Zugriff mit result(), result_array(), row() oder row_array().

Der folgende Code wird eine SQL-Abfrage direkt aus dem $ sql Argument ausführen Sie geben es

$this->db->query($sql); 

Von diesem Punkt, wenn Sie Daten aus Ihrer Datenbank wurden ausgewählt haben, können Sie dies tun:

$result = $this->db->result_array(); 

, um die Ergebnisse dieser Abfrage in ein Array zu bekommen.

Für die Paginierung können Sie beide Möglichkeiten verwenden. Dies würde zum Beispiel die Datensätze für eine Seite 3, wenn man pro Seite 10 Datensätze hat:

$query = $this->db->select('*')->from('table')->limit(10, 30)->get(); 
if($query->num_rows()) 
{ 
    return $query->result_array(); 
} 

return FALSE; 

Und wenn Sie eines der $ this-> db Methoden verwenden() (where()), CodeIgniter entweicht automatisch die Werte man es in eine:

$this->db->where('id', "'i am a nasty piece of SQL';DROP DATABASE 'my_db'"); 

das fein wäre - CodeIgniter kümmert sich für Sie davon. Seien Sie sich immer bewusst, dass, nur weil es für Sie erledigt ist, es nicht anders geht, als dass Sie Sicherheitslücken in Ihrem Code entdecken könnten.

+0

+1 für Erklärung und letzte Gedanken. – trix

Verwandte Themen