[RESOLU] Requête dans formulaire qui affiche message d'erreur

Chris32
Invité n'ayant pas de compte PHPfrance

06 nov. 2016, 17:16

Bonjour à tous et à toutes.
J'ai fabriqué un formulaire pour insérer les lignes vers
table_2 (4 colonnes : Id, Col1, Col2, Col3)
en provenance de la
table_1 (3 colonnes : Id, Col1,Col2)

Mon code Php :
$requete1 = "INSERT INTO table_2 (Col2, Col4) VALUES ('', 'x') SELECT Col1 FROM table_1";

Le message suivant s'affiche : You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'SELECT Col1 FROM table_1'

Après de nombreuse recherches, je suis en panne de solutions.
Puis-je bénéficier de vos éclairages sur les erreurs commises ?
Merci d'avance.

Chris32
Invité n'ayant pas de compte PHPfrance

06 nov. 2016, 17:32

Petit rectificatif de mon code Php :

$requete1 = "INSERT INTO table_2 (Col1, Col3) VALUES ('', 'x') SELECT Col1 FROM table_1";

... Pardon, la fatigue des recherches ...

Mammouth du PHP | 2703 Messages

06 nov. 2016, 18:36

la bonne syntaxe, c'est
$requete1 = "INSERT INTO table_2 (Col1, Col3) SELECT Col1, Col3 FROM table_1";

Chris32
Invité n'ayant pas de compte PHPfrance

06 nov. 2016, 18:52

Merci pour la réponse, mais je souhaitais réaliser que :

- la colonne 1 de la table_2 reçoive les lignes de la colonne 1 de la table_1
et que :
- la colonne 3 de la table_2 reçoive une valeur 'x' (valeur fixe)

Faisable ?

Mammouth du PHP | 2703 Messages

06 nov. 2016, 18:57

$requete1 = "INSERT INTO table_2 (Col1, Col3) SELECT Col1, 'x' FROM table_1";

Chris32
Invité n'ayant pas de compte PHPfrance

06 nov. 2016, 19:33

J'ai essayé la solution de or 1, je reçois le même message d'erreur ...
Quand j'essaie séparément le (INSERT INTO( et le (SELECT), chaque partie du code fonctionne ... mais les deux ensemble, c'est à dire un SELECT dans un INSERT INTO, le message d'erreur s'affiche.
J'ai beau vérifier la syntaxe, je ne comprends ce qui se passe.

Mammouth du PHP | 2703 Messages

06 nov. 2016, 19:58

https://mariadb.com/kb/en/mariadb/insert-select/ confirme la syntaxe.
quel est le message exact avec la dernière version ?

Chris32
Invité n'ayant pas de compte PHPfrance

06 nov. 2016, 20:09

Toujours le même message :
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'SELECT Col1 FROM table_1'

Si j'enlève les VALUES, mon code est :
$requete1 = "INSERT INTO table_2 (Col1, Col3) SELECT Col1 FROM table_1";

Un nouveau message d'erreur s'affiche :
Column count doesn't match value count at row 1

Chris32
Invité n'ayant pas de compte PHPfrance

06 nov. 2016, 20:17

Je suis allé sur la page indiquée pour la syntaxe, et mon code devient :
$requete1 = "INSERT INTO table_2 (Col1, Col3) SELECT table_1.Col1 FROM table_1";

Message d'erreur : Column count doesn't match value count at row 1.

Mammouth du PHP | 2703 Messages

06 nov. 2016, 20:35

le message d'erreur est clair, si tu as 2 champs dans le insert, il faut 2 champs dans le select, et comme il n'y en qu'un seul, cela ne fonctionne pas.

Chris32
Invité n'ayant pas de compte PHPfrance

06 nov. 2016, 20:47

Mon code corrigé :
$requete1 = "INSERT INTO table_2 (Col1, Col3) VALUES ('', 'x') SELECT (Col1,Col2) FROM table_1";

Message affiché : You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'SELECT Col1 FROM table_1'

Un vrai mystère ...
Si tu trouves la solution, tu seras un homme en "or".

Je continue de chercher pendant ce temps.
Merci pour l'aide.

Chris32
Invité n'ayant pas de compte PHPfrance

06 nov. 2016, 21:45

Si je fais la requête depuis MySQL (sans formulaire ni Php) comme ceci :
INSERT INTO table_2 (Col1, Col3)
SELECT (Col1,Col2) FROM table_1
le message d'erreur de MySQL est : #1241 - Operand should contain 1 column(s)

Si je fais le code comme ceci, cela fonctionne :
$requete1 = "INSERT INTO table_2 (Col1) SELECT (Col1) FROM table_1";

Serait-ce un problème d'insertion avec des tables ne comportant pas le même nombre de colonnes ? Connaissez-vous des pages donnant la syntaxe pour ce cas de figure ? J'ai vainement cherché ...

Merci.

Mammouth du PHP | 2703 Messages

06 nov. 2016, 21:53

INSERT INTO table_2 (Col1, Col3)
SELECT Col1,Col2 FROM table_1

Chris32
Invité n'ayant pas de compte PHPfrance

06 nov. 2016, 22:42

Solution tout à fait logique, propre, et conforme à une syntaxe valide.
La réponse est : Operand should contain 1 column(s)

Même réponse en passant par Php ou par MySQL.
Réponse qui pourtant ne correspond pas aux possibilités offertes par les requêtes.

C'est un peu rageant au bout de quelques heures ...