我就是想不通。我有一个有174638行的csv。下面是一个示例:
015826136@domain.com,2010-11-08 14:10:35
01DETAIL@domain.com,2011-11-01 20:14:21
01krisp10@domain.com,2010-11-08 15:00:09
01luis@domain.com,2010-11-08 15:00:09
01tthomas@domain.com,2010-11-08 15:09:13
02570734@domain.com,2011-10-10 11:44:54
02arman02@domain.com,2010-11-08 14:53:26
03091980@domain.com,2010-11-08 14:45:09
03331025@domain.com.com,2010-11-08 14:45:09
我不需要或使用第二栏(日期),只有第一栏(电子邮件)。
我正在读取csv并在行中循环,并将电子邮件地址插入数据库表中。当我运行另一个保存了4000条相同记录的文件时,它运行良好。当我运行完整的一行时,每行被插入两次。所有的人,然后所有的人。当然,php页面也会超时。如果我注释掉插入和回显每个电子邮件,它们只回显到屏幕上一次。
以下是php代码:
if ( isset($_POST["step"]) && $_POST["step"] == '2' ) {
if ( isset($_FILES["file"])) {
if ($_FILES["file"]["error"] == 0) {
$name = $_FILES['file']['name'];
$ext = strtolower(end(explode('.', $_FILES['file']['name'])));
$type = $_FILES['file']['type'];
$tmpName = $_FILES['file']['tmp_name'];
// check the file is a csv
if($ext === 'csv'){
if(($handle = fopen($tmpName, 'r')) !== FALSE) {
$field = $_POST['field'];
//clear the import table
mysql_query("TRUNCATE table iContact_import");
//loop through the CSV
while(($data = fgetcsv($handle, 300, ',')) !== FALSE) {
//$info = explode(",", $line);
//echo $info[0].'<br/>';
mysql_query("INSERT iContact_import (email,field) values ('".$data[0]."','".$field."')");
}
echo '<h3 style="color:green;">Database is prepped for new subscribers</h3>';
echo '<p><a href="icontact_process.php?step=3">Click here to update subscriptions</a></p>';
}
} else {
echo '<p>File is not a CSV. Please use another field with CSV values and extension.</p>';
}
} else {
echo "Error: " . $_FILES["file"]["error"] . "<br />";
}
} else {
echo '<p>Please upload a CSV file with email addresses to import.</p>';
}
}
最佳答案
您遇到了重复行,因为您没有跟踪已输入数据库的内容。如果要确保不会发生这种情况,可以向数据库的电子邮件列中添加唯一键,这将确保只添加唯一的电子邮件地址。
但是,您必须添加某种错误处理,否则脚本在尝试插入重复项时将停止。
ALTER TABLE `my_table` ADD UNIQUE KEY (`email`);
关于php - 为什么我的数据被插入两次? PHP/MySQL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8439900/