我正在尝试在导入.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附近收到语法错误。任何帮助,将不胜感激。我也愿意尝试另一种技术。
答案 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))