Si vous utilisez l’excellent framework CodeIgniter vous vous servez très certainement de l’active record qui offre une syntaxe simple pour effectuer de nombreuses requêtes.
Par défaut, toutes les requêtes sont protégées et « échappées », ce qui signifie que des back tick seront ajoutés automatiquement.
Cela peut poser un problème dès lors que vous souhaitez utiliser un espace ou un accent en guise d’argument et que vous n’avez pas la main pour changer le nom d’une colonne par exemple.
PROBLEME
$this->db->get('nom_de_la_table');
Ici, CodeIgniter protège la requête et s’arrête derrière « Nom » et renvoyer ceci :
SOLUTION
Pour désactiver l’ensemble des protections sur une requête et conserver malgré tout l’active record, vous pouvez le faire comme ceci :
$this->db->_protect_identifiers = false;
// Pensez donc à les protéger avec des back tick :
$this->db->where("`Nom de ma colonne`", $valeur);
// Le reste de la requete est inchangée
$this->db->get('nom_de_la_table');
Note : ll est également possible de d’ajouter « false » en 2ème argument à $this->db->select() pour ne pas protéger la sélection, mais cela n’agira pas sur l’ensemble de la requete, where, where_in etc …
Références :
http://codeigniter.com/forums/viewthread/141526/#696302
http://codeigniter.com/user_guide/database/queries.html
Permalien : Ne pas protéger vos requêtes sous CodeIgniter