Je cherche une réponse à cela, mais je ne l'ai pas trouvé nulle part. Sont des appels vers pdo :: Préparez () mis en cache ou devrais-je mettre en cache le résultat moi-même, c'est-à-dire si je fais le suivant
function foo() { static $handle = null; if (!$handle) { $handle = PDO::prepare(...); } /* do stuff with the handle */ }
4 Réponses :
Il y a le cache de requête MySQL . Mais en général, vous devez certainement conserver l'identifiant de la déclaration préparée et la réutiliser. P>
Le cache de requête est parti dans la version 8.0 MySQL, voir P>
https://mysqlserverteam.com/ mysql-8-0-prenant en retrait-support-forer-cache / p>
C'est pourquoi vous ne connaissez donc plus vos ressources externes, votre lien ne fonctionne plus.
Le lien dans la documentation du produit était bon pour huit ans - pas trop mal dans mon livre. Maintenant, le (s) produit (s) a changé et ma réponse est probablement obsolète.
deux appels ultérieurs à PDO :: Préparez () CODE> (Même avec la même requête SQL) doit renvoyer deux
DIFFÉRENTS
PDOSTATIE CODE> (ou Poignées) pour éviter les collisions, en particulier entre Les liaisons précédentes et actuelles que vous pouvez appliquer. Le coût de la création d'une pdostatement avec
préparer () code> est faible quand même. Ce que vous voulez peut-être que la mise en cache soit les résultats renvoyés à partir de la même requête SQL, brut ou construite par préparer () et ceci est une fonctionnalité de votre SGMS (MySQL par exemple), pas PHP. P>
Cela dépend de votre pilote de base de données. Avec MySQL, PDO créera une déclaration préparée native par défaut. Vous pouvez le désactiver, si vous souhaitez utiliser un cache de requête réelle. P>
Si vous devez absolument exécuter la même requête à plusieurs reprises, vous voudrez conserver cette poignée. Si vous utilisez des déclarations préparées émulées, elle ne fait aucune différence du tout. P>
Il y a quelque temps, j'ai essayé le faire CPDO et il peut être utilisé comme PDO standard p>