IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Transactions SQL marche pas [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 151
    Par défaut Transactions SQL marche pas
    Bonjour

    Après une bonne demi-journée de recherche je n'arrive pas à faire fonctionner ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    //      @mysql_query("SET autocommit=0");
    	@mysql_query("BEGIN"); // J'ai essayé START TRANSACTION, BEGINTRANS
     
    	$re = "UPDATE table SET nom='bli' WHERE login='login'";  //requete qui marche
    	$re2 = "UPDATE table SET nom='trr' WHERE login=vvv"; //requete qui marche pas
     
    	if(!@mysql_query($re) || !@mysql_query($re2)){
     
    			@mysql_query("ROLLBACK");
    			echo "<script>alert(\"Erreur\")</script>";
    			echo "<script>javascript:history.back();</script>";
    			exit();
    	}
     
    	else @mysql_query("COMMIT");
    La requête 1 s’exécute alors que la 2 n'est pas bonne. J'ai entendu parlé de Autocommit, est ce que le problème vient de là?

    Merci de votre aide

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 69
    Par défaut
    Hello,

    tout d'abord tes tables supportent-elles les transactions ? Quel est le moteur de base de données que tu utilises ? InnonDB ? MyISAM ?

    http://dev.mysql.com/doc/refman/5.0/fr/commit.html

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 151
    Par défaut
    Bonjour,

    Pour les transactions je ne sais pas, comment puis-je savoir? InnonDB non?

    MyISAM - > Default engine as of MySQL 3.23 with great performance
    InnonDB -> Supports transactions, row-level locking, and foreign keys

    Le moteur je ne sais pas ou regarder

  4. #4
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SHOW CREATE TABLE [NomTable]

    Il faut que ce soit InnoDB. Si ce n'est pas le cas, tu peux faire un alter dessus :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ALTER TABLE [NomTable] CHANGE TYPE=InnoDB

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 151
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SHOW CREATE TABLE matable
    Me donne :
    ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Par défaut
    Au delà du type de table (car effectivement MyISAM ne gère pas les transactions), il y a deux choses qui me sautent aux yeux dans tes requêtes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $re2 = "UPDATE table SET nom='trr' WHERE login=vvv"; //requete qui marche pas
    1. Si ta table s'appelle vraiment "table", c'est une hérésie... Ne pas utiliser de mot-clés pour nommer tes champs/tables !!!
    2. Ton login est sûrement une chaîne textuelle, entoure le avec des guillemets !

  7. #7
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci
    alors c'est normal que tes transactions ne marchent pas. Modifie ton moteur ou recrée ta table en InnoDB et cela marchera

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. JSP + requête SQL marche pas :'(
    Par fasfousba dans le forum Servlets/JSP
    Réponses: 11
    Dernier message: 02/09/2007, 03h00
  2. Pourquoi cette requête SQL ne marche pas toujours
    Par Platon93 dans le forum Requêtes et SQL.
    Réponses: 17
    Dernier message: 14/12/2006, 17h29
  3. requete SQl avec la fonction max () qui ne marche pas
    Par eclipse012 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/11/2006, 14h32
  4. [SQL] Jointure,Group BY et ORDER BY COUNT qui marche pas
    Par Stef784ever dans le forum Langage SQL
    Réponses: 8
    Dernier message: 17/08/2005, 12h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo