Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como posso usar declarações preparadas no CodeIgniter


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.