Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用LOAD DATA LOCAL Infle从CSV添加数据库行,并添加每行唯一的字段_Php_Mysql_Sql - Fatal编程技术网

Php 使用LOAD DATA LOCAL Infle从CSV添加数据库行,并添加每行唯一的字段

Php 使用LOAD DATA LOCAL Infle从CSV添加数据库行,并添加每行唯一的字段,php,mysql,sql,Php,Mysql,Sql,我创建了一个查询,从.csv文件中插入数据库行,然后用随机生成的字符串填充一个字段。这是我正在使用的代码: $sql = "LOAD DATA LOCAL INFILE '".$_FILES["file"]["tmp_name"]."' INTO TABLE mailinglist FIELDS TERMINATED BY ';' LINES TERMINATED BY '\r' (name, email) SET

我创建了一个查询,从.csv文件中插入数据库行,然后用随机生成的字符串填充一个字段。这是我正在使用的代码:

$sql = "LOAD DATA LOCAL INFILE '".$_FILES["file"]["tmp_name"]."'
        INTO TABLE mailinglist
        FIELDS TERMINATED BY ';'
        LINES TERMINATED BY '\r'
        (name, email)
        SET unsubscribe = '".substr(sha1(mt_rand()),0,30)."'";

$db = dbConnection();

$q = $db->prepare($sql);
$q->execute();
我遇到的问题是,unsubscribe字段在每一行中填充相同的随机生成字符串,而它应该为每一新行生成另一个字符串。我怎样才能修复它,使它这样做呢?

使用str_random('dddd CC');功能。

您可以使用以下功能:

concat(
  substring('abcdefghijklmnopqrstuvwxyz0123456789',rand(@seed:=round(rand(LAST_INSERT_ID())*4294967296))*3 6+1, 1),
  substring('abcdefghijklmnopqrstuvwxyz0123456789', rand(@seed:=round(rand(@seed)*4294967296))*36+1, 1),
  substring('abcdefghijklmnopqrstuvwxyz0123456789', rand(@seed)*36+1, 1)
)
它将生成一个长度为3的随机字符串。只需多次重复使用中间的子字符串即可前进

编辑:


如果您不需要真正的随机性,您可以使用内置函数让mysql代替php来完成这项工作:

$sql = "LOAD DATA LOCAL INFILE '".$_FILES["file"]["tmp_name"]."'
        INTO TABLE mailinglist
        FIELDS TERMINATED BY ';'
        LINES TERMINATED BY '\r'
        (name, email)
        SET unsubscribe = SUBSTRING(REPLACE(UUID(),"-",""),0,30)";
或者最好是:

        SET unsubscribe = UUID()";

@弗兰克卢伊特:欢迎你;请注意,此UUID函数具有随机性,但并非真正的不可预测性;所以我认为你的方案是安全的,但要记住这一点。