Maison >base de données >tutoriel mysql >Comment corriger l'erreur « Le nombre de colonnes ne correspond pas au nombre de valeurs » lors de l'insertion de données dans MySQL à partir d'un script Bash ?

Comment corriger l'erreur « Le nombre de colonnes ne correspond pas au nombre de valeurs » lors de l'insertion de données dans MySQL à partir d'un script Bash ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-20 22:52:11293parcourir

How to Fix

Insérer des valeurs dans MySQL à l'aide d'un script Bash

Vous avez créé un script Bash qui vise à se connecter à un serveur MySQL et à insérer des données à partir d'un fichier texte. Cependant, vous avez rencontré une erreur dans l'exécution du script, notamment :

ERROR 1136 (21S01) at line 1: Column count doesn't match value count at row 1

Le problème réside dans la structure de votre commande :

echo "INSERT INTO test (IP,MAC,SERVER) VALUES ('cat test.txt');" | mysql -uroot -ptest test;

Cette commande tente essentiellement d'insérer l'intégralité du contenu du fichier test.txt sous forme de valeur unique dans la table de test. Puisque votre table de test comporte trois colonnes (IP, MAC, SERVEUR), cela entraîne une inadéquation entre le nombre de valeurs (1) et le nombre de colonnes (3).

Pour résoudre ce problème, vous allez Vous devez modifier votre script Bash pour traiter chaque ligne du fichier texte comme un ensemble distinct de valeurs à insérer dans la base de données. Voici une version révisée de votre script :

#!/bin/bash
inputfile="test.txt"

cat $inputfile | while read ip mac server; do
    echo "INSERT INTO test (IP,MAC,SERVER) VALUES ('$ip', '$mac', '$server');"
done | mysql -uroot -ptest test;

Dans ce script modifié :

  • La boucle while lit chaque ligne du fichier test.txt, en attribuant les valeurs des trois champs (IP, MAC et SERVER) aux variables $ip, $mac et $server.
  • Les valeurs sont ensuite formatées dans une chaîne qui représente le SQL Instruction INSERT.
  • Enfin, la commande mysql est exécutée à plusieurs reprises, chaque itération insérant une nouvelle ligne dans la table de test.

En streaming le fichier lu et l'exécution du MySQL commande séparément, vous pouvez vous assurer que chaque ligne du fichier texte est correctement insérée en tant que ligne distincte dans la base de données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn