php - "Column count doesn' t match value count at row 1”当我尝试上传超过 1 行时出现错误。(CSV 文件到 MySQL 数据库)

标签 php mysql csv

我现在遇到了一个非常烦人的问题。我尝试创建一个写入 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、用户名、密码、名字、姓氏、权限、图像、拇指、标题 3,Frank,密码,Frank,VanDeursen,作者,frankImg.jpg,frankImg.jpg,tropical.jpg 4、Kevin,密码,Kef,Borgh,作者,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 - "Column count doesn' t match value count at row 1”当我尝试上传超过 1 行时出现错误。(CSV 文件到 MySQL 数据库),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33941171/

相关文章:

csv - 将多个 csv 文件的数据导入到 H2O flow 中

java - PHP 中的 "catch block"是什么?

php - 当我尝试从 CodeIgniter 中的连接表回显数据时,没有任何反应

具有相同列名的 MySQL 连接表

mysql - 我想获取动态列名的空计数

sql - 通过 shellscript 将 CSV 导入 SQLite,主键问题和重复数据

php - Mysql连接不上,目标机器主动拒绝

php - 如何在 MySQL 数据库中查找前 5 个重复条目?

PHP session 在刷新时不保存

python - 值错误: I/O operation on closed file when using **generator** over **list**