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

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 151
    Points : 69
    Points
    69
    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 du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 69
    Points : 44
    Points
    44
    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 du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 151
    Points : 69
    Points
    69
    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 émérite 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
    Points : 2 566
    Points
    2 566
    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 du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 151
    Points : 69
    Points
    69
    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 éclairé

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Points : 872
    Points
    872
    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 !
    • Mon blog PHP : http://blog.alterphp.com
    • "Peace cannot be kept by force, it can only be achieved by Understanding" -- Albert Einstein

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 151
    Points : 69
    Points
    69
    Par défaut
    Ma table ne s'appelle pas "table"
    et en ce qui concerne les guillemets, c'est voulu pour que la requête ne s’exécute pas

    merci quand même.

  8. #8
    Membre émérite 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
    Points : 2 566
    Points
    2 566
    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

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 151
    Points : 69
    Points
    69
    Par défaut
    Il n'y a pas de type InnoDB dans le résultat de ma requête c'est pour ça?

  10. #10
    Membre émérite 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
    Points : 2 566
    Points
    2 566
    Par défaut
    Oui ton moteur est actuellement MyISAM (défaut). Sous PhpMyAdmin, c'est très simple à la création de ta table de choisir InnoDb (liste déroulante), moteur qui de plus de permet de gérer efficacement les contraintes entre tes tables, ON DELETE CASCADE etc...

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 151
    Points : 69
    Points
    69
    Par défaut
    Ça marche, merci beaucoup de la clarté des réponses et de la rapidité.

+ 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