CodeIgniter understøtter ikke forberedte erklæringer. Hvis du ser på kildekoden til CI's Database-klasse, vil du se, at de løser bindinger blot ved at erstatte spørgsmålstegnet med data fra det beståede array:
De understøtter kun forespørgselsbinding med unavngivne pladsholdere. Se http://ellislab.com/codeigniter/user-guide/database/ queries.html
Forespørgselsbindinger
Bindinger giver dig mulighed for at forenkle din forespørgselssyntaks ved at lade systemet sammensætte forespørgslerne for dig. Overvej følgende eksempel:
$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";
$this->db->query($sql, array(3, 'live', 'Rick'));
Spørgsmålstegnet i forespørgslen erstattes automatisk med værdierne i arrayet i den anden parameter i forespørgselsfunktionen.
og http://ellislab.com/forums/viewthread/105112/#528915
Selvom CI ikke understøtter forberedte erklæringer, understøtter det forespørgselsbindinger. Med forberedte sætninger skal du kalde en eller anden type prepare() funktion og derefter en type execute() funktion. Med forespørgselsbindinger skal du kun kalde én funktion, og den gør stort set det samme. På grund af dette kan jeg bedre lide forespørgselsbindinger end forberedte udsagn.
På en sidenote ændrer du ?
til :foo
er blot ved at skifte fra unavngivne til navngivne bindinger (hvilket CI tilsyneladende heller ikke understøtter). Bare fordi du bruger enten eller, betyder det ikke, at du forbereder erklæringerne.