2010-12-09 80 views
2

Lorsque j'utilise des instructions préparées dans PDO, dois-je "construire" une instruction préparée pour chaque appel db ou puis-je utiliser une instruction pour tous les appels? exemple:Quelle est la meilleure façon d'utiliser les instructions préparées par PDO?

class DB{ 
    ... 
    function query($sqlStatementString,$data){ 
     $this->sth->prepare($sqlStatementString); 
     $this->sth->execute($data); 
    } 
    ... 
} 

OU

class User{ 
    ... 
    function doSomething(){ 
     $sthForDoSomething->prepare(...); 
     $sthForDoSomething->execute(...); 
    } 
    ... 
    function jump(){ 
     $sthForJump->prepare(...); 
     $sthForJump->execute(...); 
    } 
} 

Y at-il des implications mémoire/vitesse d'utilisation d'une méthode sur l'autre? merci!

+0

Pour afficher votre code en tant que blocs de code, vous devez les mettre en retrait de quatre espaces (mettez-les en surbrillance et appuyez sur Ctrl + K). – BoltClock

Répondre

1

Si vous devez émettre la même requête plus d'une fois, avec uniquement des paramètres différents liés aux espaces réservés, vous devez essayer de structurer votre code de telle sorte que vous puissiez réutiliser l'instruction. L'appel à prepare permet à la base de données de créer et de mettre en cache un plan d'exécution pour la requête que vous réutiliserez dans les prochains appels à exécuter, ce qui accélère les requêtes.

+0

Donc, je suppose que faire appel à partir d'une méthode de requête générique dans une classe DB est hors de question. Je devrais définir chaque déclaration préparée dans chaque modèle. Maintenant, une deuxième question se pose: définir ceux-ci sur le modèle serait les redéclarer avec chaque instance de ce modèle? si c'est le cas, il serait préférable de construire une couche intermédiaire entre le db et le modèle pour définir ces énoncés seulement 1 fois chacun? Merci Dan! – Juank

+1

Vous êtes probablement allé trop loin là-bas, quand vous devriez passer ce temps sur votre application au lieu de construire une autre couche d'abstraction DB. Les avantages de la réutilisation des plans d'exécution sont * généralement * assez mineurs - faites-le quand vous savez que cela compte, ou quand c'est facile. Laisser vos méthodes de modèle réutiliser les instructions est facile; Si une méthode va faire une boucle sur un tas de choses et exécuter la même requête sur chacun avec des données différentes, c'est une bonne réutilisation de l'instruction préparée. Avoir de nombreuses instances d'une classe de modèle réutiliser une instruction préparée est difficile et ne vaut probablement pas le temps. –

+0

Suggestion sage, merci Dan! – Juank