目前,我遇到了一个非常烦人的问题。我尝试创建一个写入MySQL数据库的CSV上传文件。该系统有效,但仅当我有1行时。当我有更多行时,出现错误“列数与行1的值计数不匹配”。
这是我的PHP代码:
DEFINE('DB_HOST', 'localhost'); // Server naam
DEFINE('DB_USERNAME', 'root'); // Gebruikersnaam
DEFINE('DB_PASSWORD', 'root'); // Wachtwoord
DEFINE('DB_DATABASE', 'wp3'); // Database naam
// Initialisatie
$databasetable = "users";
$fieldseparator = ",";
$lineseparator = "\n";
$csvfile = "backups/compleet.csv";
$output = "";
// Database connection
$con = mysqli_connect(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
mysqli_set_charset($con, "utf8");
if (mysqli_connect_errno())
{
die('Service kan niet geladen worden.');
}
// Perform checks with CSV file
if(!file_exists($csvfile))
{
echo "File not found. Make sure you specified the correct path.\n";
exit;
}
$file = fopen($csvfile, "r");
if(!$file)
{
echo "Error opening data file.\n";
exit;
}
$size = filesize($csvfile);
if(!$size)
{
echo "File is empty.\n";
exit;
}
// Get content from CSV file
$csvcontent = fread($file, $size);
fclose($file);
// Initialize CSV file variables
$lines = 0;
$queries = "";
$linearray = array();
// Read each line from CSV file, clean data and put data in database
foreach(explode($lineseparator, $csvcontent) as $line)
{
$lines++;
$line = trim($line, " \t");
$line = str_replace("\r", "", $line);
$line = str_replace("'", "\'", $line);
$linearray = explode($fieldseparator, $line);
$linemysql = implode("','", $linearray);
$query = "INSERT INTO $databasetable VALUES('', '$linemysql')";
// $queries .= $query . "\n";
if (!mysqli_query($con, $query))
{
echo 'Fout: ' . $sql . '<br>' . mysqli_error($con);
}
}
// Read all the rows from the table and print to screen
$sql = "SELECT * FROM $databasetable";
$result = mysqli_query($con, $sql);
$columns_total = mysqli_num_fields($result);
while ($row = mysqli_fetch_array($result))
{
for ($i=0; $i<$columns_total; $i++)
{
$output .= $row["$i"] . ', ';
}
$output .= '<br>';
}
echo "<p>Er zijn $lines regels aan de tabel toegevoegd.</p>";
echo "<p>De database bevat nu de volgende data:<br>$output</p>";
这是我的csv文件:
id,username,password,firstname,lastname,permissions,image,thumb,header 3,Frank,password,Frank,VanDeursen,author,frankImg.jpg,frankImg.jpg,tropical.jpg 4,Kevin,password,Kef,Borgh,author,kev.jpg,kev.jpg,ocean.jpg
感谢您的帮助!
最佳答案
David, password, david, backname, author, stock.jpg, image.jpg, stock.jpg
Frank, password, frank, backname, admin, stock,jpg, image,jpg, stock,jpg
您的csv文件在第二行中有更多列,请仔细检查
stock,jpg, image,jpg, stock,jpg
,它们都用逗号而不是点!关于php - 当我尝试上传多于1行时,出现“列数与行1的值计数不匹配”错误。 (CSV文件到MySQL数据库),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33941171/