当点击提交按钮时,我在 MySQL 数据库中得到重复的日期,这意味着 CSV 文件中的一行被插入两次并在数据库中得到相同的记录。
我的 php 代码在这里。
if(isset($_POST['submit'])){
if( $_FILES['file']['name']){
$filename = explode('.',$_FILES['file']['name']);
if ($filename[1] == 'csv'){
$handle = fopen($_FILES['file']['tmp_name'],"r");
if($_POST['dataType']=='aType'){
while ($data = fgetcsv($handle)){
$item0 = mysqli_real_escape_string($con,$data[0]);
$item1 = mysqli_real_escape_string($con,$data[1]);
$item2 = mysqli_real_escape_string($con,$data[2]);
$item3 = mysqli_real_escape_string($con,$data[3]);
$sql = "insert into `table_XX`(`Column_A`,`Column_B`,`Column_C`,`Column_D`) VALUES ('$item0','$item1','$item2','$item3')";
mysqli_query($con,$sql);
}
if(!(mysqli_query($con,$sql))) echo "something is wrong!";
fclose($handle);
}
}
}
我的 Html 代码在这里。
<form method="post" action="import.php" enctype="multipart/form-data">
<select name="dataType" class="form-control">
<option selected="selected">pls select data</option>
<option>aType</option>
</select>
<input type="file" name="file">
<input type="submit" name="submit" value="submit">
</form>
我的代码有什么问题?谢谢。
编辑:
后来才知道是这行代码导致了这个错误。
if(!(mysqli_query($con,$sql))) echo "something is wrong!"
但是,使用这样的代码来检查我们的查询是一个坏习惯吗?
if(mysqli_query($con,$sql))
顺便问一下,我如何使用数组来存储来自
的值mysqli_real_escape_string
而不是使用这个 x4
$item0 = mysqli_real_escape_string($con,$data[0]);
$item1 = mysqli_real_escape_string($con,$data[1]);
$item2 = mysqli_real_escape_string($con,$data[2]);
$item3 = mysqli_real_escape_string($con,$data[3]);
最佳答案
原因是因为mysqli_query()
被调用了两次。同样在 if()
中它会自己执行!如果你想检查 mysqli_query()
的结果,将它安全地保存在一个变量中,例如 $queryResult = mysqli_query()
然后是 if($queryResult)
.
将 mysqli_query($con,$sql);
替换为
if(!mysqli_query($con,$sql)) {
echo "something is wrong!";
}
并删除:if(!(mysqli_query($con,$sql))) echo "something is wrong!";
ADDITION 阵列解决方案
替换
$item0 = mysqli_real_escape_string($con,$data[0]);
$item1 = mysqli_real_escape_string($con,$data[1]);
$item2 = mysqli_real_escape_string($con,$data[2]);
$item3 = mysqli_real_escape_string($con,$data[3]);
与(未测试)
function escapeArray(array $data) {
foreach($data as $i => $item) {
$data[$i] = mysqli_real_escape_string($item);
}
return $data;
}
$data = escapeArray($data);
然后要么执行 VALUES (".$data[0].",".$data[1].",".$data[2].",".$data[3].")
或
VALUES (". implode(',', $data) . ")
关于php - 为什么在使用 php 将 CSV 文件导入 MySQL 时会得到重复数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43208869/