Anda telah mencipta skrip Bash yang bertujuan untuk menyambung ke pelayan MySQL dan memasukkan data daripada fail teks. Walau bagaimanapun, anda telah mengalami ralat dalam pelaksanaan skrip, khususnya:
ERROR 1136 (21S01) at line 1: Column count doesn't match value count at row 1
Isunya terletak pada struktur arahan anda:
echo "INSERT INTO test (IP,MAC,SERVER) VALUES ('cat test.txt');" | mysql -uroot -ptest test;
Arahan ini pada asasnya cuba untuk memasukkan keseluruhan kandungan fail test.txt sebagai nilai tunggal ke dalam jadual ujian. Memandangkan jadual ujian anda mempunyai tiga lajur (IP, MAC, SERVER), ini mengakibatkan ketidakpadanan antara bilangan nilai (1) dan bilangan lajur (3).
Untuk menyelesaikan isu ini, anda akan perlu mengubah suai skrip Bash anda untuk merawat setiap baris fail teks sebagai set nilai yang berasingan untuk dimasukkan ke dalam pangkalan data. Berikut ialah versi semakan skrip anda:
#!/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;
Dalam skrip yang diubah suai ini:
Dengan menstrimkan membaca fail dan pelaksanaan perintah MySQL secara berasingan, anda boleh memastikan bahawa setiap baris dalam fail teks dimasukkan dengan betul sebagai baris yang berbeza dalam pangkalan data.
Atas ialah kandungan terperinci Bagaimana untuk Membetulkan Ralat 'Kiraan lajur tidak sepadan dengan kiraan nilai' Semasa Memasukkan Data ke dalam MySQL daripada Skrip Bash?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!