Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment puis-je utiliser des instructions préparées dans CodeIgniter

CodeIgniter ne prend pas en charge les instructions préparées. Si vous regardez le code source de la classe Database de CI, vous verrez qu'ils résolvent les liaisons simplement en remplaçant les points d'interrogation par les données du tableau transmis :

Ils ne prennent en charge que la liaison de requête avec des espaces réservés sans nom. Voir http://ellislab.com/codeigniter/user-guide/database/ requêtes.html

Liaisons de requête

Les liaisons vous permettent de simplifier la syntaxe de votre requête en laissant le système assembler les requêtes pour vous. Prenons l'exemple suivant :

$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";
$this->db->query($sql, array(3, 'live', 'Rick'));

Les points d'interrogation dans la requête sont automatiquement remplacés par les valeurs du tableau dans le deuxième paramètre de la fonction de requête.

et http://ellislab.com/forums/viewthread/105112/#528915

Même si CI ne prend pas en charge les instructions préparées, il prend en charge les liaisons de requête. Avec les instructions préparées, vous devez appeler un type de fonction prepare() puis un type de fonction execute(). Avec les liaisons de requête, vous n'avez qu'à appeler une fonction et cela fait essentiellement la même chose. Pour cette raison, j'aime mieux les liaisons de requête que les instructions préparées.

Sur une sidenote, changer ? à :foo passe simplement de liaisons sans nom à des liaisons nommées (que CI ne prend apparemment pas en charge non plus). Ce n'est pas parce que vous utilisez l'un ou l'autre que que vous préparez les relevés.