在加载文件infile期间生成随机字段

时间:2017-02-28 18:53:31

标签: mysql

我正在尝试在导入.csv文件时生成名为Access的随机字母数字字段。 .csv文件有3个字段:First_Name,Last_Name,Email。我的MYSQL表有4个字段:First_Name,Last_Name,Email,Access。我需要在导入过程中添加一个名为Access的第四个字段,它可以只是一个随机的字母数字。这就是我到目前为止所提出的。

//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 First_Name=@First_Name, Last_Name=@Last_Name, 
Email=@Email, '$access2'=@Access";

在我的PHP页面底部,我声明了random_password的函数:

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

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

1 个答案:

答案 0 :(得分:1)

您不需要用户变量。只需将CSV中的三列映射到三个相关的DB列,然后使用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'";

使用以下解决方案为每行导入不同的Access代码:假设您要使用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))