[RESOLU] [Problème] INSERT INTO SELECT WHERE

Eléphanteau du PHP | 25 Messages

18 juin 2019, 16:38

Bonjour,
Le truc est simple, je souhaiterai avoir la bonne syntaxe de cette requête
$req = $bdd->prepare('INSERT INTO cheval (?, '.$_GET['id'].') SELECT (com, id_nom)  WHERE id_nom = '.$_GET['id']);

Mammouth du PHP | 2703 Messages

18 juin 2019, 16:49

il manque le from pour le select
après, il faudrait le détail des tables pour en dire plus.

Eléphanteau du PHP | 25 Messages

18 juin 2019, 16:56

BDD
Table : cheval
Colonne 1 : id
Colonne 2 : com
Colonne 3 : id_nom
Le FROM ne change rien ^^ Peut-être l'ai-je mal écrit ?
$req = $bdd->prepare('INSERT INTO cheval (?, '.$_POST['id'].') SELECT (com, id_nom) FROM cheval WHERE id_nom = '.$_POST['id']);
Oui y'a eu un changement GET to POST mais cela n'a pas d'importance np

Avatar du membre
Mammouth du PHP | 1609 Messages

18 juin 2019, 17:26

Salut, peut être simplement enlève les parenthèses au niveau des colonnes du SELECT et nomme les 2 colonnes dans le INSERT.
https://www.w3schools.com/sql/sql_inser ... select.asp

INSERT INTO cheval (com, id_nom) SELECT com, id_nom FROM cheval WHERE id_nom = :id_nom

Mais c'est quand même bizarre tu fais un INSERT d'un SELECT de la même table... je vois pas bien ce que tu comptes faire avec ça. Ca n'a pas de sens. :mrgreen:

Soit le SELECT retourne des lignes mais elles sont déjà dedans, tu vas juste les dupliquer. Soit il ne retourne rien et ça n’insérera rien...
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 25 Messages

19 juin 2019, 14:27

Le but est de créer une zone de commentaires à partir d'une page sélectionnée au préalable. J'ai donc besoin de récupérer le même id que la page précédente pour ainsi l'insérer dans l'autre table (cheval) ou se trouve aussi les commentaires.
Effectivement mon programme fonctionne maintenant mais comme tu le dis, les données se dupliquent, comment résoudre ce problème ?
$req = $bdd->prepare('INSERT INTO cheval (com, id_nom) SELECT ?, '.$_POST['id'].' FROM cheval WHERE id_nom = '.$_POST['id']);
$req->execute(array($_POST['com']));

Mammouth du PHP | 2703 Messages

19 juin 2019, 20:04

la syntaxe classique d'un insert, c'est :
insert into cheval (com, id_nom) values (?, ?)
on utilise un select que dans certains cas, pas dans ce contexte.

Avatar du membre
Mammouth du PHP | 1609 Messages

19 juin 2019, 20:11

Je croyais avoir répondu à ton dernier message mais j'ai du zapper d'envoyer la réponse.

Je te disais que je n'étais pas sûr de comprendre mais que si tu veux copier les données d'une table à une autre tu dois donc avoir 2 tables avec des noms différents et dans ce cas tu mets le nom de la table cible dans l'INSERT et le nom de la table source dans le SELECT.

Par contre ton code ne semble toujours pas logique. Ca devrait plutôt être, avec une table cheval_1 comme source et une table cheval_2 comme cible, de la forme :
$req = $bdd->prepare('INSERT INTO cheval_2 (com, id_nom) SELECT com, id_nom FROM cheval_1 WHERE com = ? AND id_nom = ?');
$req->execute(array($_POST['com'], $_POST['id']));

Mais ça reste un peu étrange, l'énoncé de ton problème est trop vague.
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 25 Messages

20 juin 2019, 09:33

Ok très bien, problème résolu, je ne sais pas pourquoi je voulais mettre ce WHERE qui ne servait à rien ici ^^
Merci pour vos réponses !