0

所以,我有这个用户列表,我从 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    
}

谢谢

4

2 回答 2

1

如果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

于 2013-01-04T14:59:32.220 回答
0

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()呼叫更改为。mysqli_xxx()

于 2013-01-04T16:03:21.863 回答