2016-05-28 1 views
-1

En PHP, vous pouvez démarrer des transactions lorsque vous exécutez des requêtes. Mais quand devrait l'utilisez-vous? Est-ce mauvais d'utiliser cette fonctionnalité avec chaque requête? Ou devez-vous uniquement utiliser cette requête lorsque vous ajoutez/supprimez/mettez à jour de grandes quantités de données?Est-ce une mauvaise pratique d'utiliser les transactions php avec chaque requête?

Exemple d'une transaction:

try { 
    $db->beginTransaction(); 

    $db->exec("some query"); 

    $stmt = $db->prepare("another query"); 
    $stmt->execute(array($value)); 

    $stmt = $db->prepare("another query again??"); 
    $stmt->execute(array($value2, $value3)); 

    $db->commit(); 
} catch(PDOException $ex) { 
    //Something went wrong rollback! 
    $db->rollBack(); 
    echo $ex->getMessage(); 
} 

Je dirais qu'il fortement faire baisser les performances si vous faites cela avec toutes les requêtes dans votre code

tl; dr Pouvez-vous utiliser les transactions avec chaque requête? Ou devriez-vous seulement les utiliser lors de l'exécution de grandes manipulations à la base de données?

Répondre

0

Vous devez absolument utiliser des transactions si vous voulez effectuer toutes les modifications ou aucune. Par exemple, si vous transférez de l'argent d'une personne à une autre, vous devriez augmenter votre solde et diminuer celui d'un autre.

Il est bon d'utiliser des transactions si vous avez de nombreuses requêtes simples et que vous avez besoin de performances. Cela dépend de la base de données, mais souvent les bases de données essaient de faire tous les changements dans la mémoire pendant la transaction et seulement ensuite vider le disque. La mémoire est beaucoup plus rapide que les disques.

Mais cela n'a d'importance que si vous avez un site de chargement ou si vous avez besoin d'insérer 1000s d'enregistrements et que chaque 100ms est important. Si vous avez moins de 100 requêtes, elles sont simples et il n'y a rien de mal si vous en exécutez la moitié, puis des sauts de script (redémarrage du serveur, timeout PHP, ...) et vos données sont toujours cohérentes - vous ne pouvez pas utiliser de transactions.

Si vous pensez que vous n'utilisez pas de transactions si vous ne les démarrez pas explicitement, vous avez peut-être tort. Cela dépend de la base de données mais il peut autostart transaction avec chaque requête.
https://stackoverflow.com/a/2950764/437763