[英]set conditions while uploading from csv file
所以,我有这个用户列表,它是从csv文件中获得的。
我需要做的是:我得到要上传的文件,我检查每一行是否存在用户,如果他这样做,那么我要做的就是更新他,如果他不存在,我应该为他创建一个新帐户。
我确实知道如何将其作为逻辑...但是在使用csv导入时我感到困惑...
因此,这是我使用的:
$handle = fopen($_FILES['filename']['tmp_name'], "r");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$import="INSERT into users (Username,Password,Email,first_name,last_name,phone,user_id,age,sex) values('$data[0]','".md5($data[1])."','$data[2]','$data[3]','$data[4]','$data[5]','$data[6]','$data[7]','$data[8]')";
mysql_query($import) or die(mysql_error());
}
fclose($handle);
我需要的是这样的:
foreach (user as $data[7]) {
if user exists in user table then $query1
else $query2
}
谢谢
如果user_id
是表的主键,则可以使用ON DUPLICATE KEY UPDATE
子句在一条语句中插入新行或更新现有行:
INSERT INTO users (Username,Password,Email,first_name,last_name,phone,user_id,age,sex)
VALUES('$data[0]','".md5($data[1])."','$data[2]','$data[3]',
'$data[4]','$data[5]','$data[6]','$data[7]','$data[8]')
ON DUPLICATE KEY UPDATE
Username = '$data[0]',
Password = '".md5($data[1])."',
Email = '$data[2]',
first_name = '$data[3]',
last_name = '$data[4]',
phone = '$data[5]',
age = '$data[7]',
sex = '$data[8]';
检查MySQL文档中的详细信息: http : //dev.mysql.com/doc/refman/5.6/en/insert.html
MySQL有一个方便的小功能,称为LOAD DATA INFILE
,它允许它直接加载CSV文件,而无需在PHP中进行插入循环。
您的整个代码可能像这样简单:
$import="LOAD DATA INFILE '{$_FILES['filename']['tmp_name']}' INTO users (Username,Password,Email,first_name,last_name,phone,user_id,age,sex)";
mysqli_query($connection, $import) or die(mysqli_error($connection));
请参阅此处的MySQL手册页: http : //dev.mysql.com/doc/refman/5.1/en/load-data.html
注意:我尚未测试以上内容。 如果MySQL对临时文件没有直接读取权限,则可能需要将其移动到MySQL可以首先读取的位置,或者改用LOAD DATA LOCAL INFILE
。
注意2:我使用mysqli_xxx()
函数而不是mysql_xx()
因为不建议使用mysql_xx()
函数。 如果需要,可以随时将其改回,但要注意,不建议使用mysql_xx()
。 我建议您mysql_xx()
将所有的mysql_xx()
调用更改为mysqli_xxx()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.