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 :

Résultat absent après une requête


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Profil pro
    Enseignant
    Inscrit en
    Juillet 2004
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juillet 2004
    Messages : 128
    Points : 119
    Points
    119
    Par défaut Résultat absent après une requête
    Bonjour, je travailles sur une page web qui utilises XmlHttpRequest pour envoyer et recevoir des données.

    J'ai une première requête qui ajoute des données à une table :
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    $insertSQL = sprintf("INSERT INTO responsabilite (Groupe, Operation, Sasissant) VALUES (%s, %s, %s)",
                           GetSQLValueString($_GET['idg'], "int"),
                           GetSQLValueString($_GET['ido'], "int"),
    					   GetSQLValueString($_GET['idr'], "int"));
     
     
      mysql_select_db($database_MyConnect, $MyConnect);
      mysql_query('START TRANSACTION',$MyConnect);
      $Result1 = mysql_query($insertSQL, $MyConnect);
      if (!$Result1) {
        mysql_query('ROLLBACK',$MyConnect);
      }
      else {
        $Result1 = mysql_query("SELECT max(IdResponsabilite) as Nbre FROM responsabilite",$MyConnect);
        if (!$Result1) {
    	  mysql_query('ROLLBACK',$MyConnect);
    	}
    	else {
    	  $row_result = mysql_fetch_assoc($Result1);
    	  mysql_query('COMMIT',$MyConnect);
    	  echo "<?xml version='1.0' encoding='UTF-8' ?>";
          echo utf8_encode('<document>');
    	  echo utf8_encode('<ind>');
    	  echo $row_result['Nbre'];
    	  echo utf8_encode('</ind>');
    	  echo utf8_encode('</document>');
    	}
      }
    J'ai une deuxième requête me permettant de réinitialiser toutes mes données :
    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
    17
    18
    19
    20
    $query_rcdGroupes = sprintf("SELECT G.IdGroupe, G.Nom FROM responsabilite INNER JOIN groupe G ON responsabilite.Groupe=G.IdGroupe WHERE (responsabilite.Operation=%s) AND (responsabilite.Sasissant=%s)", GetSQLValueString($ido_rcdGroupes, "int"),GetSQLValueString($idr_rcdGroupes, "int"));
    $rcdGroupes = mysql_query($query_rcdGroupes, $MyConnect) or die(mysql_error());
    $row_rcdGroupes = mysql_fetch_assoc($rcdGroupes);
    $totalRows_rcdGroupes = mysql_num_rows($rcdGroupes);
     
    	  echo "<?xml version='1.0' encoding='UTF-8' ?>";
          echo utf8_encode('<document>');
    	  if ($totalRows_rcdGroupes > 0) {
    	  	do { 
    		  echo utf8_encode('<element>');
    		  echo utf8_encode('<id>');
    		  echo utf8_encode($row_rcdGroupes['IdGroupe']);
    		  echo utf8_encode('</id>');
    		  echo utf8_encode('<nom>');
    		  echo utf8_encode($row_rcdGroupes['Nom']);
    		  echo utf8_encode('</nom>');
    		  echo utf8_encode('</element>');
          	} while ($row_rcdGroupes = mysql_fetch_assoc($rcdGroupes));
    	  }
    	  echo utf8_encode('</document>');
    Lorsque je lance ma deuxième requête, je ne reçois pas mes nouveaux enregistrement. Si je relance ma page, là ca marche, j'ai le nouvel enregistrement. D'où peut venir ce problème? Merci d'avance

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 62
    Points : 84
    Points
    84
    Par défaut TRANSACTION
    Avoue que je ne suis pas expert en TRANSACTIONs. Mais il me semble qu'il faut 'finaliser' la commande TRANSACTION avec COMMIT. Peut être c'est à cause de ça que MYSQL ne retourne rien. Donc, moi je ferais comme ça :

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    $insertSQL = sprintf("INSERT INTO responsabilite (Groupe, Operation, Sasissant) VALUES (%s, %s, %s)",
                           GetSQLValueString($_GET['idg'], "int"),
                           GetSQLValueString($_GET['ido'], "int"),
    					   GetSQLValueString($_GET['idr'], "int"));
     
     
      mysql_select_db($database_MyConnect, $MyConnect);
      mysql_query('START TRANSACTION',$MyConnect);
      $Result1 = mysql_query($insertSQL, $MyConnect);
      if (!$Result1) {
        mysql_query('ROLLBACK',$MyConnect);
      }
      else {
    /** 
    * !!! 
    * c'est ici qu'on dit à MYSQL d'enregistrer la TRANSACTION (écrire sur le disque)
    */
        mysql_query('COMMIT',$MyConnect);
       // ensuite on fait le reste 
    $Result1 = mysql_query("SELECT max(IdResponsabilite) as Nbre FROM responsabilite",$MyConnect);
    /**
    * ici il y a pas de modifications de base donc pas besoin de  ROLLBACK
    *
    *    if (!$Result1) {
    *	  mysql_query('ROLLBACK',$MyConnect);
    *	}
    */
           if (!$Result1) {
    	 trigger_error('Erreur execution : '.' '.mysql_error($MyConnect) );
           }else {
    	  $row_result = mysql_fetch_assoc($Result1);
     
    	  echo "<?xml version='1.0' encoding='UTF-8' ?>";
          echo utf8_encode('<document>');
    	  echo utf8_encode('<ind>');
    	  echo $row_result['Nbre'];
    	  echo utf8_encode('</ind>');
    	  echo utf8_encode('</document>');
    	}
      }
    J'espère que ça t'aidera dans ton travail

  3. #3
    Membre régulier
    Profil pro
    Enseignant
    Inscrit en
    Juillet 2004
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juillet 2004
    Messages : 128
    Points : 119
    Points
    119
    Par défaut
    Si je fais un appel à "SELECT max(IdResponsabilite)" avant le commit, c'est justement pour recevoir mon dernier enregistrement avant qu'un autre soit insérer, sinon il n'y aurait aucun intérêt à la transaction.

    Je me demande s c'est pas un problème provenant des connexions persistantes

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 62
    Points : 84
    Points
    84
    Par défaut mysql_insert_id() sans la transaction
    Dans ce cas utilise mysql_insert_id() qui va retourner l'identifiant généré par la dernière requête INSERT (http://fr3.php.net/manual/fr/functio...-insert-id.php)
    .

  5. #5
    Membre régulier
    Profil pro
    Enseignant
    Inscrit en
    Juillet 2004
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juillet 2004
    Messages : 128
    Points : 119
    Points
    119
    Par défaut
    Mon problème n'est pas de récupérer le dernier enregistrement dans ma transaction, mon problème est de récupérer mon dernier enregistrement ajouté lorsque ma transaction est terminée. Ma deuxième page ne me le renvoie pas alors que si je la recharge il n'y a pas de problème, je retrouve mon enregistrement.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 62
    Points : 84
    Points
    84
    Par défaut COMMIT ou pas COMMIT
    Si tu fait pas COMMIT pour finir la transaction tu ne peux pas récupérer tes enregistrements. Quand tu recharge la page une connexion MYSQL se ferme et une nouvelle s'ouvre. Entre ces 2 connexions ton serveur MYSQL fait COMMIT puisque par défaut il est en 'autocommit'.

Discussions similaires

  1. Trier une table après une requête d’ajout
    Par Meduse dans le forum Access
    Réponses: 6
    Dernier message: 30/05/2006, 15h54
  2. Etat après une requête
    Par platoon64 dans le forum Bases de données
    Réponses: 2
    Dernier message: 22/05/2006, 14h03
  3. [MySQL] Afficher une date correctement après une requête
    Par Nerva dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 12/04/2006, 16h27
  4. Résultats différent entre une requête SQL, et la même en VBA
    Par thetaps dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 23/09/2005, 12h05
  5. Affecter résultat SQL d'une requête à une variable
    Par bozolozo dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 02/01/2005, 17h37

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