Précédent   Forum des professionnels en informatique > Bases de données > MySQL
MySQL Forum d'entraide MySQL. Avant de poster -> FAQ MySQL, Tutoriels MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/12/2010, 15h13   #1
Invité de passage
 
Inscription : décembre 2010
Messages : 2
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 2
Points : 0
Points : 0
Par défaut gestion des erreurs dans une transaction mysql

J'ai créé une transaction comprenant plusieurs requêtes de mise à jour de différentes tables.
A la fin de la transaction si aucune erreur n'est détectée, je valide la transaction, ou invalide dans le cas inverse.
Pour se faire, une variable en début de transaction et à chaque requête je teste et positionne ma variable à faux si une erreur est détectée.
Code :
IF (mysql_error() != NULL)  {$valid_transaction = false;	}
J'ai volontairement inséré une anomalie dans une requête pour test.
Surprise mysql_error() retourne null, l'erreur n'est pas détectée. J'ai lu sur un autre forum qu'à l'intérieur d'une transaction mysql_error est inhibé. Quelqu'un a t il une idée ?
Merci
ytoutou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2010, 14h13   #2
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
Moi, je serais toi, je m'appuierai sur un mécanisme d'exception en php et pas des conditions. Comme ça, tu contrôles que tu as des résultats qui ont une forme acceptable et sinon ... je dirais que ça marche vachement bien.

Ensuite, en php, on ne compare pas à null avec ce signe égal là, on le fait avec l'autre signe égal. le vrai.
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2010, 07h16   #3
Invité de passage
 
Inscription : décembre 2010
Messages : 2
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 2
Points : 0
Points : 0
J'ai dû mal m'exprimer.
Il ne s'agit pas d'un problème php, mais d'un problème mysql qui semble ne pas détecter ou plutôt ne pas renvoyer de message d'erreur lorsqu'une requête se plante, ce qui est gênant dans une transaction.
ytoutou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2010, 23h21   #4
Candidat au titre de Membre du Club
 
Inscription : octobre 2010
Messages : 31
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 31
Points : 12
Points : 12
ci-joint le code pour gérer les transactions pour une table innodb
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
<?php
// connect TO DATABASE
$dbh = mysqli_connect($host, $user, $pass, $db);
 
// turn off auto-commit
mysqli_autocommit($dbh, FALSE);
 
// run query 1
$result = mysqli_query($dbh, $query1);
IF ($result !== TRUE) {
    mysqli_rollback($dbh);  // IF error, roll back transaction
}
 
// run query 2
$result = mysqli_query($dbh, $query2);
IF ($result !== TRUE) {
    mysqli_rollback($dbh);  // IF error, roll back transaction
}
 
// AND so ON...
 
// assuming no errors, commit transaction
mysqli_commit($dbh);
 
// close connection
mysqli_close($dbh);
?>
sinon si tu veux toujours garder ton code :
essaye cà :
Code :
1
2
3
 
mysql_query("SELECT * FROM nonexistenttable", $link);
echo mysql_error($link) ;
sgdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h37.


 
 
 
 
Partenaires

Hébergement Web