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