92 votes

Le nombre de colonnes ne correspond pas au nombre de valeurs de la ligne 1.

J'ai lu les autres messages, mais cette question est unique. Donc ce fichier de vidage SQL a ceci comme dernière entrée.

INSERT INTO `wp_posts` VALUES(2781, 3, '2013-01-04 17:24:19', '2013-01-05 00:24:19'.

J'essaie d'insérer cette valeur dans la table...

INSERT INTO `wp_posts` VALUES(5, 5, '2005-04-11 09:54:35', '2005-04-11 17:54:35'

j'obtiens l'erreur suivante : "Le nombre de colonnes ne correspond pas au nombre de valeurs de la ligne 1." Je suis donc perdu sur le concept de l'application de la colonne et de la ligne ici.

Non. 2781,3 signifie la ligne 2781 et la colonne 3 ? Et est-ce que 5,5 signifie ligne 5 et colonne 5 ?

103voto

juergen d Points 85039

L'erreur signifie que vous ne fournissez pas autant de données que le tableau wp_posts contient des colonnes. Et maintenant le moteur de la BD ne sait pas dans quelles colonnes mettre vos données.

Pour y remédier, vous devez fournir les noms des colonnes que vous souhaitez remplir. Exemple :

insert into wp_posts (column_name1, column_name2)
values (1, 3)

Consultez la définition du tableau et voyez quelles colonnes vous voulez remplir.

Et insert signifie que vous êtes l'insertion d'un nouveau enregistrement. Vous ne modifiez pas un enregistrement existant. Utilisez update pour ça.

37voto

V Kash Singh Points 329
  1. vous avez oublié la virgule entre deux valeurs ou nom de colonne
  2. vous mettez des valeurs supplémentaires ou un nom de colonne supplémentaire

21voto

Gabriel Points 1565

Vous devriez également envisager de nouveaux déclencheurs.

MySQL n'affiche pas le nom de la table dans l'erreur, ce qui vous laisse vraiment dans l'embarras. Voici un exemple concret :

use test;
create table blah (id int primary key AUTO_INCREMENT, data varchar(100));
create table audit_blah (audit_id int primary key AUTO_INCREMENT, action enum('INSERT','UPDATE','DELETE'), id int, data varchar(100) null);
insert into audit_blah(action, id, data) values ('INSERT', 1, 'a');
select * from blah;
select * from audit_blah;
truncate table audit_blah;

delimiter //
/* I've commented out "id" below, so the insert fails with an ambiguous error: */
create trigger ai_blah after insert on blah for each row 
begin 
  insert into audit_blah (action, /*id,*/ data) values ('INSERT', /*NEW.id,*/ NEW.data);
end;//

/* This insert is valid, but you'll get an exception from the trigger: */
insert into blah (data) values ('data1');

10voto

Sebastian Points 100

MySQL signalera également "Column count doesn't match value count at row 1" (le nombre de colonnes ne correspond pas au nombre de valeurs à la ligne 1) si vous essayez d'insérer plusieurs lignes sans délimiter les ensembles de lignes dans la section VALUES par des parenthèses, comme suit :

INSERT INTO `receiving_table`
  (id,
  first_name,
  last_name)
VALUES 
  (1002,'Charles','Babbage'),
  (1003,'George', 'Boole'),
  (1001,'Donald','Chamberlin'),
  (1004,'Alan','Turing'),
  (1005,'My','Widenius');

9voto

Vous pouvez résoudre l'erreur en fournissant les noms des colonnes que vous affectez.

> INSERT INTO table_name (column1,column2,column3)
 `VALUES(50,'Jon Snow','Eye');`

veuillez noter que le point-virgule ne doit être ajouté qu'après la déclaration fournissant des valeurs

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X