Php 阵列多插入取消验证和电子邮件检查

Php 阵列多插入取消验证和电子邮件检查,php,sql,Php,Sql,我有一个数组,我想检查数据库中是否存在用户名和电子邮件值,如果不存在,请在数据库中插入用户名和电子邮件值。使用多嵌件,因为大约有80000个嵌件需要预制 $arr1 = Array ( [0] => Array ( [Username] => uname1, [Email] => email1 ) [1] => Array ( [Username] => uname2, [Email] => email2 )

我有一个数组,我想检查数据库中是否存在用户名和电子邮件值,如果不存在,请在数据库中插入用户名和电子邮件值。使用多嵌件,因为大约有80000个嵌件需要预制

$arr1 = Array
(
    [0] => Array       ( [Username] => uname1,  [Email] => email1  )

    [1] => Array   (  [Username] => uname2,  [Email] => email2  )

    [2] => Array   (  [Username] => uname3,  [Email] => email3 )

)

具有80000个
INSERT
s的SQL语句的运行速度将低于80000个独立的
INSERT
s,因为不需要构建单片、多
INSERT
SQL语句字符串。要覆盖现有行,您需要一个主键以确保覆盖重复记录:


我的代码假定
Username
是主键。如果没有,则添加到
SET
子句以包含主键。如果<代码>用户名是您的主键,请考虑使用基于整数的字符串作为主键,基于字符串慢。

最简单的方法是在用户名+电子邮件上创建唯一索引。然后你可以做一个插入忽略。尽管您可能不希望使用PHP大容量插入80000条记录,除非您还调整了超时参数。最好将其分解为批量插入,每次插入500个。然后它会很好地扩展


对唯一索引使用INSERT IGNORE只会插入索引中不匹配的记录。不要进行单次插入和/或查找。虽然这会扩大规模,但速度会很慢。将您的数据分块,它将扩展并执行良好。

使用multi-Insert在数据库中插入数组,它还应检查uname和电子邮件是否已经存在$arr1=array([0]=>array([Username]=>uname1,[email]=>email1)[1]=>array([Username]=>uname2,[email]=>email2)[2]=>array([用户名]=>uname3[电子邮件]=>email3))
foreach ($arr1 as $user){
    $sql = "REPLACE INTO `users` SET `Username`='" . mysql_escape_string($user["Username"]) . "', `Email`='" . mysql_escape_string($user["Email"]) . "'";
    mysql_query($sql);
}