transaction avec requete multiple
Par aurelien gerits le jeudi, 12 mars 2009, 19:55 - Lien permanent
Pour effectuer une requête avec transaction,
il faut utiliser la class magixcjquery_magixdb_layer qui effectue les tâches de transaction de vos enregistrements.
Vous pouvez alors insérer, supprimer, mettre à jour vos enregistrements en une seule fois avec un mode multi-requête très simple d'utilisation.
Cette méthode protège les requêtes effectué avec le système de rollback qui annulera toutes les modifications faites à la base de données.
On procède comme ceci :
[PHP] function del(){ $layer = new class magixcjquery_magixdb_layer(); $sql=array( "DELETE FROM matable1 WHERE id = ".$del, "DELETE FROM matable2 WHERE parts_id =".$del ); $layer->transaction($sql); }
On peu effectuer autant de requête que possible en les plaçant dans un tableau
Cette fonction équivaut à ceci :
[PHP] <?php $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); $dbh->beginTransaction(); $sth = $dbh->exec("DELETE FROM matable1 WHERE id = ".$del"); $sth = $dbh->exec("DELETE FROM matable2 WHERE parts_id =".$del"); $dbh->rollBack(); $dbh = null; ?>
Bien sur c'est une version simplifié de ce que la fonction transaction fais réellement avec une série de test avant d'effectuer la requête
Une utilisation plus complexe avec une double insertion.
[PHP] function insert_news($titre,$lien,$texte){ $sql = array('INSERT INTO news (titre,lien,texte) VALUE('.$this->layer->escape_string($titre).','.$layer->escape_string($lien).','.$layer->escape_string($texte).',NOW())', 'INSERT INTO publication (date_publication) VALUE("0000-00-00 00:00:00")' ); $layer->transaction($sql); }
Conseils : Utiliser la fonction escape_string($string) pour échapper les chaînes de caractères.