CodeIgniter non supporta le istruzioni preparate. Se guardi il codice sorgente per la classe Database di CI, vedrai che risolvono i collegamenti semplicemente sostituendo i punti interrogativi con i dati dell'array passato:
Supportano solo l'associazione di query con segnaposto senza nome. Vedi http://ellislab.com/codeigniter/user-guide/database/ query.html
Associazioni di query
Le associazioni ti consentono di semplificare la sintassi delle query consentendo al sistema di assemblare le query per te. Considera il seguente esempio:
$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";
$this->db->query($sql, array(3, 'live', 'Rick'));
I punti interrogativi nella query vengono automaticamente sostituiti con i valori nell'array nel secondo parametro della funzione di query.
e http://ellislab.com/forums/viewthread/105112/#528915
Anche se CI non supporta le istruzioni preparate, supporta le associazioni di query. Con le istruzioni preparate devi chiamare un tipo di funzione prepare() e quindi un tipo di funzione execute(). Con le associazioni di query, devi solo chiamare una funzione e sostanzialmente fa la stessa cosa. Per questo motivo, mi piacciono i binding di query meglio delle istruzioni preparate.
In una nota a margine, cambiare ?
a :foo
sta semplicemente cambiando da binding senza nome a binding con nome (che apparentemente non supporta neanche CI). Solo perché usi o non significa che stai preparando le dichiarazioni.