首页 > 解决方案 > 如何在 php 中导入 mysql 数据库之前检查 csv 文件中的每一列数据?

问题描述

我的列标题是 id、name、phone。如果我在 id 列中给出名称,则数据未插入,但消息显示为“成功导入”。我想显示“数据未正确定义”之类的消息。如何在导入 mysql 之前验证代码?

我试图检查 if 和 else 条件,但没有得到我需要的实际结果。

$sql = "INSERT IGNORE INTO `all`(`id`, `name`,`phone`)   VALUES ('".$getData[0]."','".$getData[1]."','".$getData[2]."')";
$result = mysqli_query($conn, $sql);
if($result)
 {
echo  "<script type=\"text/javascript\">alert(\"CSV File has been successfully Imported.\");                    
  }</script>";
else {
echo "<script type=\"text/javascript\"> alert(\"Invalid File Format/ Data Please check file is csv and data as per headings.\");      
}</script>";
}

我希望警报消息是“不正确的数据”,但会获得“成功导入”。

标签: phpmysqliimport-csv

解决方案


CSV 中的字段顺序可能会有所不同,例如。第 0 列不能总是“id”。

考虑这个 CSV:

name, id, phone
'Alice', 1, 1234
'Bob', 2, 5678

这个代码:

$sql = "INSERT IGNORE INTO `all`(`id`, `name`,`phone`) VALUES (?, ?, ?)";
$stmt = $db->prepare($sql);
$header = null;
while($row = fgetcsv($handle)) {
    if ($header == null) {
        $header = $row;
        continue;
    }
    $data = array_combine($header, $row);
    // $data is now an assoziative array, eg. you can grab "id" by name

    $stmt->execute([ $data['id'], $data['name'], $data['phone'] ]);
}

推荐阅读