CodeIgniter não suporta Declarações Preparadas. Se você observar o código-fonte da classe Database do CI, verá que eles resolvem as ligações simplesmente substituindo os pontos de interrogação pelos dados do array passado:
Eles são compatíveis apenas com Query Binding com espaços reservados sem nome. Consulte http://ellislab.com/codeigniter/user-guide/database/ consultas.html
Vinculações de consulta
As ligações permitem que você simplifique sua sintaxe de consulta, permitindo que o sistema reúna as consultas para você. Considere o seguinte exemplo:
$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?"; $this->db->query($sql, array(3, 'live', 'Rick'));
Os pontos de interrogação na consulta são substituídos automaticamente pelos valores na matriz no segundo parâmetro da função de consulta.
e http://ellislab.com/forums/viewthread/105112/#528915
Mesmo que o CI não dê suporte a instruções preparadas, ele dá suporte a Query Bindings. Com instruções preparadas você tem que chamar algum tipo de função prepare() e então algum tipo de função execute(). Com ligações de consulta, você só precisa chamar uma função e ela basicamente faz a mesma coisa. Por causa disso, gosto mais de ligações de consulta do que de instruções preparadas.
Em uma nota lateral, alterando
?
para :foo
está apenas mudando de ligações não nomeadas para ligações nomeadas (que o CI aparentemente também não suporta). Só porque você usa ou não significa que você está preparando as declarações.