7
votes

PHP PDO Caching

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 */
}


0 commentaires

4 Réponses :


6
votes

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.

Le cache de requête est parti dans la version 8.0 MySQL, voir

https://dba.stackexchange.com / Questions / 217577 / Pourquoi-MySQL-Suppression-Query-Cache-in-8-0-Version

https://mysqlserverteam.com/ mysql-8-0-prenant en retrait-support-forer-cache /


2 commentaires

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.



5
votes

deux appels ultérieurs à PDO :: Préparez () (Même avec la même requête SQL) doit renvoyer deux DIFFÉRENTS PDOSTATIE (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 () 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.


0 commentaires

2
votes

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.

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.


0 commentaires

1
votes

Il y a quelque temps, j'ai essayé le faire CPDO et il peut être utilisé comme PDO standard


0 commentaires