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 :

[SQL] Vérifié si l'enregistrement a été mis à jour avec un UPDATE


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé Avatar de Sayrus
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    899
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 899
    Points : 570
    Points
    570
    Par défaut [SQL] Vérifié si l'enregistrement a été mis à jour avec un UPDATE
    Hello,

    Petite question pour laquelle je suis sûr vous allez vite me donner la réponse:

    Est-il possible de savoir, avec uniquement un UPDATE, si l'enregistrement X dans la base de données a été mis à jour?

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    foreach($languages as $language){
     
    $query='UPDATE articles_content SET title=\'' . addslashes($_POST['req_title_'.$language['ini']]) . '\' WHERE articleId=' . (int)$_GET['id'] . ' AND languageId=' . $language['id']; 
    			$request=mysql_query($query)or die(mysql_error());
     
    if(enregistrement_pas_trouve){
     
     
    INSERT INTO articles_content... 
     
    }

    }

    Ici l idéal serait : si l'enregistrement pour languageId n'a pas été trouver, alors on fait la nouvelle insertion.

    Le but est de ne pas refaire un SELECT...

    Cela est il possible?

  2. #2
    Nouveau membre du Club Avatar de Shinn77
    Inscrit en
    Juin 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Points : 36
    Points
    36
    Par défaut
    J 'vois pas l'intérêt en fait...

    M'enfin de toute façon ton UPDATE se fera toujours SAUF s'il se fait pas (logique) dans quel cas ou tu passe dans le OR DIE et il te sort une erreur SQL... enfin vu le code que tu as écris là.

    En gros, il est obligé de se faire l'update car s'il réussit pas, le script s'arrête.

    Shinn77

  3. #3
    Membre confirmé Avatar de Sayrus
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    899
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 899
    Points : 570
    Points
    570
    Par défaut
    Mais un UPDATE sur telles ou telles condition peut ne pas se faire si les conditions ne répondent pas à ce que j'ai demandé...

    Donc un UPDATE ne générera pas d'erreur mais ne se fera simplement pas...

    Or, j'aimerais que si l'id de langue n'existe pas, donc update impossible, qu'il fasse un insert à la place...

    Et pour cela, j'ai besoin de savoir, si ma requete UPDATE a modifié quelque chose pas dans la base de données.

  4. #4
    Nouveau membre du Club Avatar de Shinn77
    Inscrit en
    Juin 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Points : 36
    Points
    36
    Par défaut
    Okay.

    Ben je ne sais pas... à faire faire un SELECT avant et faire soit un update soit un insert j vois pas d'autre alternative =)

    (si les proc stoc bien faites mouahaha non rien :p)

    Shinn77

  5. #5
    Membre habitué
    Inscrit en
    Juin 2006
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 133
    Points : 150
    Points
    150
    Par défaut
    Bonjour,

    Vous pouvez tester en premier lieu si langageid existe dans votre base avant de faire votre update.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $requestId=mysql_query("SELECT count(*) as ExisteID from articles_content where articleId=".(int)$_GET['id']." AND languageId=".$language['id']) or die(mysql_error());
     
    $line = mysql_fetch_assoc($requestId);
     
    if ($line['ExisteID']>0)
    //update
    else
    // insert

  6. #6
    Membre confirmé Avatar de Sayrus
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    899
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 899
    Points : 570
    Points
    570
    Par défaut
    Citation Envoyé par Andalor Voir le message
    Bonjour,

    Vous pouvez tester en premier lieu si langageid existe dans votre base avant de faire votre update.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $requestId=mysql_query("SELECT count(*) as ExisteID from articles_content where articleId=".(int)$_GET['id']." AND languageId=".$language['id']) or die(mysql_error());
     
    $line = mysql_fetch_assoc($requestId);
     
    if ($line['ExisteID']>0)
    //update
    else
    // insert
    Hello,

    Est-ce réellement le seul moyen? Mon but est de faire le moins de requetes possible. N'existe-t-il pas un moyen autre de savoir si la requete UPDATE a updaté l'enregistrement ou pas?

    Sinon j'utiliserai cette alternative, le seul problème c'est que c'est une requete de plus.

    Merci.

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Vous pouvez prendre le problème à l'envers : si l'enregistrement existe déjà, donc l'insertion échoue, vous faites un UPDATE. C'est ce que permet de réaliser l'"option" ON DUPLICATE KEY.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO ma_table SET champ1 = 'valeur1', ..., champN = 'valeurN' ON DUPLICATE KEY UPDATE champ1 = 'valeur1', ..., champN = 'valeurN';
    Plus d'informations dans la documentation de MySQL.

  8. #8
    Membre confirmé Avatar de Sayrus
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    899
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 899
    Points : 570
    Points
    570
    Par défaut
    waow terrible cette requête!

    Merci à tous.

    Je cloture le sujet.

  9. #9
    Nouveau membre du Club Avatar de Shinn77
    Inscrit en
    Juin 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Points : 36
    Points
    36
    Par défaut
    Pareil, j'ai moi aussi appris qq chose aujourd'hui.
    Merci Julp.

    Shinn77

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

Discussions similaires

  1. [AC-2010] Formulaire mis à jour avec liste déroulante
    Par wrdaniel dans le forum Access
    Réponses: 2
    Dernier message: 24/03/2013, 18h21
  2. Cache pas mis à jour avec EclipseLink
    Par thierryler dans le forum JPA
    Réponses: 0
    Dernier message: 29/04/2011, 15h48
  3. Connaitre Nbre Enregistrements Mis à Jour
    Par Daniel MOREAU dans le forum Access
    Réponses: 2
    Dernier message: 28/02/2006, 11h08
  4. Réponses: 5
    Dernier message: 29/12/2005, 07h03
  5. Réponses: 3
    Dernier message: 28/11/2003, 21h26

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