Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
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 31/01/2011, 17h07   #1
Invité régulier
 
Inscription : novembre 2007
Messages : 67
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 67
Points : 6
Points : 6
Par défaut INSERT INTO avec une condition

Bonjour,

je voudrais insérer une ligne dans ma table "USERS"
Code :
INSERT INTO `matable1`.`USERS` (`id`, `info`, `nom`, `stock`) VALUES (NULL, 'test', '".$nom."', '5');
je voudrais que si $nom="tintin" la ligne ne soit pas insérer et récupérer le fait qu'elle n'est pas été insérée.

merci.
pol2095 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2011, 17h27   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 990
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 990
Points : 18 241
Points : 18 241
Envoyer un message via MSN à CinePhil
Apparemment, tu crées la requête avec PHP.
Pourquoi ne pas mettre cette condition en PHP ?
Code :
1
2
3
4
5
6
7
IF($nom != 'tintin')
{
    $req = "
        INSERT INTO USERS (info, nom, stock)
        VALUES ('test', '$nom', 5)
    ";
}
Au passage :
1) J'ai viré de ta requête toutes les apostrophes inversées inutiles.
2) J'ai viré l'alimentation de l'id avec NULL parce que ça aussi c'est inutile si l'id est de type entier et auto-incrémenté, comme je crois le comprendre et comme cela doit être pour constituer une bonne clé.
3) Si stock est de type numérique, inutile de mettre la valeur à insérer entre apostrophes.
4) En mettant la requêtes entre guillemets, les variables seront interprétées directement et il est donc inutile de couper la chaîne et de la raccorder par l'opérateur de concaténation "point".

Euh... ta BDD s'appelle vraiment matable1 ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2011, 18h06   #3
Invité régulier
 
Inscription : novembre 2007
Messages : 67
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 67
Points : 6
Points : 6
en fait je fais un select pour savoir si "tintin" est déjà présent dans matable1, en fait je voudrais tout mettre dans INSERT INTO.
pol2095 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2011, 18h32   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 990
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 990
Points : 18 241
Points : 18 241
Envoyer un message via MSN à CinePhil
Si la colonne nom a une contrainte d'unicité (index de type unique), alors utilise INSERT IGNORE INTO.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2011, 18h51   #5
Invité régulier
 
Inscription : novembre 2007
Messages : 67
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 67
Points : 6
Points : 6
est-ce que ça peut marcher
Code :
INSERT INTO USERS (info, nom, stock) VALUES ('test', '$nom', 5) WHERE NOT EXISTS ( SELECT * FROM USERS WHERE nom = 'tintin')
si ça fonctionne, comment savoir si tintin existait ou pas
pol2095 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2011, 23h06   #6
Invité régulier
 
Inscription : novembre 2007
Messages : 67
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 67
Points : 6
Points : 6
ça a l'air de marcher
Code :
1
2
3
$sql = "INSERT INTO USERS (info, nom, stock) SELECT 'test', '$nom', 5 FROM USERS WHERE NOT EXISTS (SELECT * FROM USERS WHERE nom = 'tintin') LIMIT 1";
$result = mysql_query($sql);
echo $insert = mysql_affected_rows();
si $insert=1 : $nom n'existait pas dans la base de données et a été inséré, si $insert=0 : $nom existait déjà.
pol2095 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



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


 
 
 
 
Partenaires

Hébergement Web