8797 sujets

Développement web côté serveur, CMS

Bonjour,

Je n'arrive a formater cette requete conditionnel :

INSERT INTO listes 
SET listes.ID = '1', listes.Nom = 'test' 
(SELECT * FROM User 
WHERE User.IDUser = '2')

Cela retourne une erreur :
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near (SELECT * FROM User 
WHERE User.IDUser = '2')

Comment faire ?
Avez vous une idée ?
Merci d'avance...
Modifié par cvneo (09 Mar 2009 - 09:39)
Modérateur
Salut,

Peut être que je me trompe car je n'ai pas la possibilité de déboguer là où je suis. Néanmoins, ne chercherais tu pas à faire ceci par hasard :


$sql = "INSERT INTO listes (ID, Nom) ";
$sql .= "VALUES ('1','test') ";
$sql .= "WHERE (SELECT * FROM User WHERE IDUser = '2')";


Au passage, je te remercie d'écrire tes messages suivant les règles(13) du forum.

++
Modifié par Nolem (08 Mar 2009 - 20:17)
Salut à vous,

une insertion dans une table (INSERT) n'est pas conditionnée par une condition (clause WHERE) !

Donc soit
INSERT INTO listes
SET ID = '1', Nom = 'test' 
soit
INSERT INTO listes (ID, Nom) 
VALUES ('1','test')
Lorsqu'il n'existe pas directement de clef unique pour une table on lui affecte généralement un identifiant unique (ID) qui est alors numérique (pas besoin de quotes) et qu'il est bien pratique de mettre en auto_increment (donc on ne lui donne pas de valeur lors de l'INSERT)... ce qui donne alors :
INSERT INTO listes
SET Nom = 'test' 
ou
INSERT INTO listes (Nom) 
VALUES ('test')

Modifié par Heyoan (09 Mar 2009 - 06:23)
Bonjour,

Merci pour vos réponses.

Donc si j'ai bien compris Nolem a répondu a coté ?

C'est étrange qu'il ne soit pas possible de faire un "Where" ou autre méthode pour vérifier quelque chose au moment de l'insert, ne serais ce que pour éviter des injections.

J'ai finalement fait mes vérif. avant l'insert, mais cela demande une requete supplémentaire que j'aurais bien voulue évité. Je ne suis certainement pas le seul dans ce cas a ce demander pourquoi cela n'est pas possible...
http://dev.mysql.com/doc/refman/5.1/en/insert-select.html

Tu peux effectivement faire une sous requête dans un INSERT. Mais pas de conditions sur le INSERT lui même.
Vu que tu entres de nouvelles données, ça n'a pas grand intéret de mettre des conditions dessus, pas comme un UPDATE qui s'applique à certains champs existant particuliers (ou pas...).
Si une infos ne doit pas être insérée, l'idéal est de le traiter en amont, de faire le tri des infos à stocker avant d'insérer.