Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
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 30/10/2007, 15h00   #1
Membre éprouvé
 
Avatar de Sayrus
 
Inscription : décembre 2005
Messages : 818
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : décembre 2005
Messages : 818
Points : 456
Points : 456
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 :
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?
Sayrus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/10/2007, 15h17   #2
Nouveau Membre du Club
 
Avatar de Shinn77
 
Inscription : juin 2007
Messages : 51
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : juin 2007
Messages : 51
Points : 27
Points : 27
Envoyer un message via ICQ à Shinn77 Envoyer un message via MSN à Shinn77
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
Shinn77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/10/2007, 15h23   #3
Membre éprouvé
 
Avatar de Sayrus
 
Inscription : décembre 2005
Messages : 818
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : décembre 2005
Messages : 818
Points : 456
Points : 456
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.
Sayrus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/10/2007, 15h32   #4
Nouveau Membre du Club
 
Avatar de Shinn77
 
Inscription : juin 2007
Messages : 51
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : juin 2007
Messages : 51
Points : 27
Points : 27
Envoyer un message via ICQ à Shinn77 Envoyer un message via MSN à Shinn77
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
Shinn77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/10/2007, 15h36   #5
Membre habitué
 
Inscription : juin 2006
Messages : 133
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 133
Points : 125
Points : 125
Bonjour,

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

Code :
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
Andalor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/10/2007, 15h41   #6
Membre éprouvé
 
Avatar de Sayrus
 
Inscription : décembre 2005
Messages : 818
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : décembre 2005
Messages : 818
Points : 456
Points : 456
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 :
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.
Sayrus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/10/2007, 15h48   #7
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
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 :
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.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/10/2007, 15h56   #8
Membre éprouvé
 
Avatar de Sayrus
 
Inscription : décembre 2005
Messages : 818
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : décembre 2005
Messages : 818
Points : 456
Points : 456
waow terrible cette requête!

Merci à tous.

Je cloture le sujet.
Sayrus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/10/2007, 16h20   #9
Nouveau Membre du Club
 
Avatar de Shinn77
 
Inscription : juin 2007
Messages : 51
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : juin 2007
Messages : 51
Points : 27
Points : 27
Envoyer un message via ICQ à Shinn77 Envoyer un message via MSN à Shinn77
Pareil, j'ai moi aussi appris qq chose aujourd'hui.
Merci Julp.

Shinn77
Shinn77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h44.


 
 
 
 
Partenaires

Hébergement Web