经常在完成一次DZ与UC的对接之后,会出现这样的问题,如果不解决,就会出现所有老用户需要重新激活,而且需要验证邮箱的问题,下面给出方案解决。
将下面代码复制到一个php中,并在浏览器输入地址执行
<?php $dbserver =’localhost’; //此处改成数据库服务器地址 $dbuser =’root’;//此处写数据库用户名 $dbpwd =’1234′;//数据库密码 $dbname =’disucz’;//数据库名称 $charset =’gbk’;//此处写字符集gbk或者utf8 $uc_pre =’pre_ucenter_’;//UC表前缀 $dx_pre =’pre_’;//Discuz! X2表前缀 //此行开始向下不要改动 set_time_limit(0); //0为无限制 $connect=mysql_connect($dbserver,$dbuser,$dbpwd) or die(“无法连接数据库”); @mysql_select_db($dbname,$connect); mysql_query(“set names $charset”); $query = mysql_query(“SELECT * FROM `{$uc_pre}members` WHERE `uid` not in(select `uid` from `{$dx_pre}common_member`) “,$connect); while($user = mysql_fetch_array($query)) { $password=$user[password]; mysql_query(” replace INTO `{$dx_pre}common_member` (uid,username,password,adminid,groupid,regdate,email) VALUES (‘$user[uid]’, ‘$user[username]’, ‘$password’,’0′,’10’,’$user[regdate]’,’$user[email]’) “); mysql_query(” replace INTO `{$dx_pre}common_member_field_forum` (uid) VALUES (‘$user[uid]’)”); mysql_query(” replace INTO `{$dx_pre}common_member_field_home` (uid) VALUES (‘$user[uid]’)”); mysql_query(” replace INTO `{$dx_pre}common_member_count` (uid) VALUES (‘$user[uid]’)”); mysql_query(” replace INTO `{$dx_pre}common_member_profile` (uid) VALUES (‘$user[uid]’)”); mysql_query(” replace INTO `{$dx_pre}common_member_status` (uid) VALUES (‘$user[uid]’)”); } echo “已从UC批量导入激活成功”; ?>
注释:连接到数据库后,PHP会比对UC和DZ用户表的数据,发现不存在于DZ但是存在于UC的用户,就会把用户导入到DZ,但是这一注册不会设置其他内容,比如用户填写的详细信息,由于以前是存储在DZ数据库中,所以还是丢失了
这样子用户已经全部导入,用户数也恢复了正常
下一步,将用户的邮箱验证全部设置为已验证
数据库执行:
update pre_common_menber ste emailstatus=“1”;
注释:这是更新数据库中emailstatus字段,1为验证 pre记得改为你的论坛的前缀