Ne pas protéger vos requêtes sous CodeIgniter

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->where("Nom de ma colonne", $valeur);
$this->db->get('nom_de_la_table');

Ici, CodeIgniter protège la requête et s’arrête derrière « Nom » et renvoyer ceci :

SELECT * FROM (`nom_de_la_table`) WHERE `Nom` de ma colonne

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 :

// Désactive la protection sur les requetes
$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