[PHP] Transaction

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [PHP] Transaction

par Wells83 » 28 janv. 2009, 18:13

je viens de trouver, le moteur de ma base était en MyISAM et en en innoDB ;)

par x@v » 28 janv. 2009, 15:46

tu as essayé d'imprimer
echo ...

par Wells83 » 28 janv. 2009, 15:25

hum j'ai pas été clair apparemment. y a deux requêtes.

la première marche.
la seconde je fait exprès de la faire planter

donc oui on rentre bien dans le catch (l'erreur apparait à l'écran etc...)

et donc je supose que l'instruction rollback est faites, sauf qu'elle reverse rien du tout puisque Nom_Race egal bien à 111 dans ma table au lieu des valeurs de départ.

par x@v » 28 janv. 2009, 12:40

en même temps le rollback est dans un catch pour attraper une erreur, donc si il n'y en pas...

par thehawk » 27 janv. 2009, 19:24

La requete marche bien dans phpmyadmin ?

je serais d'avis de mettre : $dbh->exec("UPDATE race SET Nom_Race='111'");


Bonne journée Hawk

par Wells83 » 27 janv. 2009, 18:12

Moyennement convaincu:
<?php
try {
	$dbh = new PDO("mysql:host=localhost;dbname=testcharset", 'root', '');
	$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
	$dbh->beginTransaction();
	$dbh->exec("UPDATE race SET Nom_Race=111");
	$dbh->exec("UPDATE race SET Nom_Racse=333");
	$dbh->commit();
	//$dbh = null;
    }
catch(PDOException $e)
    {
	$dbh->rollback();
    echo $e->getMessage();
    }
?>
Le script perte bien une erreur (mauvais champ dans le WHERE du second update) mais nom_race a bien prit la valeur 111.....

il n'y a donc aucun rollback de fait. Si qq'un peut me donner l'erreur dans le script je suis preneur parce que la je vois pas :)

par Hywan » 25 déc. 2008, 00:17

Hey :),

Ne te prend pas la tête. Utilise PDO qui gère lui-même les transactions (via une exception PDOException). Tu as les méthodes beginTransaction(), commit() et rollBack() à ta disposition. Si le SGBDR utilisé ne supporte pas les transactions, PDO est censé les émuler.

Et au passage, rollback ne prend pas de « e » …

Lien : http://php.net/pdo.

par Wells83 » 23 déc. 2008, 10:37

un ptit up, personne ne maitrise les transaction?

par Wells83 » 19 déc. 2008, 10:26

Aucune erreur, le script marche très bien. Le problème c'est que l'UPDATE n'est pas rollbacker, ce qui est le but de la manœuvre :)

par Elie » 18 déc. 2008, 16:25

Montre l'erreur affiché dans le navigateur.

[PHP] Transaction

par Wells83 » 18 déc. 2008, 16:03

Bonjour, je suis en train de m'essayer uax transactions en php. Voici mon code tt simple:

Code : Tout sélectionner

<?php function rollbacke($error) { global $link; if($error!='') { mysqli_query($link,"ROLLBACK"); throw new exception($error); //return 1; exit; } //else mysql_query("COMMIT",$linker); } $link = mysqli_connect('localhost','root', '', 'testcharset') or die(mysqli_error($link)); mysqli_autocommit($link, FALSE); try { mysqli_query($link,"BEGIN"); mysqli_query($link,"UPDATE race SET Nom_Race=222") or rollbacke(mysqli_error($link)); mysqli_query($link,"select * race WHERE Id_Race=a") or rollbacke(mysqli_error($link)); //echo 'Erreur: '.$errors; //if($errors=='') mysql_query("COMMIT"); //mysql_query("ROLLBACK",$linker); echo 'toto'.mysqli_error($link); mysqli_query($link,"COMMIT"); } catch(Exception $e) {echo "Erreur: " . $e->getMessage();} ?>
Bien sur la seconde requête produit une erreur puisqu'il manque les '.
Malheureusement la première n'est pas rollbacker si j'ose dire.
Je vois pas d'où viens le soucis. si qq'un maitrise bien les rollback, je suis preneur merci.