2017-02-28 40 views
0

我试图在导入.csv文件时生成一个名为Access的随机字母数字字段。 .csv文件有3个字段:First_Name,Last_Name,Email。我的MYSQL表有4个字段:First_Name,Last_Name,Email,Access。我需要在导入过程中添加一个名为Access的第四个字段,它可以是随机的字母数字。这是我迄今为止所提出的。在加载文件infile期间生成随机字段

//get the csv file 
$file = $_FILES[csv][tmp_name]; 
$handle = @fopen($file,"r"); 

//loop through the csv file and insert into database 

if ($_FILES[csv][size] > 0) { 

$access2 = random_password_length(15); 

$temp = $_FILES['csv']['tmp_name']; 

$sqlstatement="LOAD DATA LOCAL INFILE '$temp' INTO TABLE sendit_emails 
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n' 
(@First_Name, @Last_Name, @Email, @Access) 
SET [email protected]_Name, [email protected]_Name, 
[email protected], '$access2'[email protected]"; 

在我的PHP页面的底部,我宣布的功能random_password:

<?php 
function random_password_length($length = 15) { 
$chars = "ABCDEFGHIJKLMNPQRSTUVWXYZ123456789"; 
$password = substr(str_shuffle($chars), 0, $length); 
return $password; 
} 
?> 

我得到@Access附近的语法错误。任何帮助,将不胜感激。我也愿意尝试另一种技术。

回答

1

您不需要用户变量。只需将CSV中的三列映射到三个相关的数据库列,然后使用SET语句来设置第四列。

像这样的东西应该为你工作:

$sqlstatement="LOAD DATA LOCAL INFILE '$temp' INTO TABLE sendit_emails 
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n' 
(First_Name, Last_Name, Email) 
SET Access='$access2'"; 

用于导入于各行的不同接入代码如下解决方案:假设你想使用你现有的15伪随机字母数字字符的方法,你能做到这一点在MySQL这样的:SET Access=upper(left(md5(rand()),15))

因此,完整的查询将是:

$sqlstatement="LOAD DATA LOCAL INFILE '$temp' INTO TABLE sendit_emails 
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n' 
(First_Name, Last_Name, Email) 
SET Access=upper(left(md5(rand()),15)) 
+0

谢谢您的答复。尽管您的建议导入了Access字段,但我注意到所有记录都具有相同的字母数字代码。有没有办法为每一行获得不同的随机字母数字? – user3258571

+0

当然,只需跳过php函数并在MySQL中生成密码即可。假设你想使用15个伪随机字母数字字符的现有方法,你可以在MySQL中这样做:'SET Access = upper(left(md5(rand()),15))' –

+0

这是有效的。这种方法是真正的随机还是有一个模式?非常感谢您的帮助。 – user3258571