UCenter(Discuz! 核心用戶中心)僅需操作兩張核心表即可完成用戶同步:uc_members(基本帳號資訊)與 uc_memberfields(擴充資料)。本文示範將自有會員表資料批次匯入,並依 UCenter 規則生成鹽值與加密密碼。
-- 來源會員表
CREATE TABLE `net_members` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`username` VARCHAR(32) DEFAULT NULL,
`add_time` INT(11) DEFAULT NULL,
`email` VARCHAR(50) DEFAULT NULL,
`password` VARCHAR(50) DEFAULT NULL,
`last_login` INT(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
<?php
$host = 'localhost';
$db = 'abc';
$user = 'root';
$pass = 'root';
$conn = mysql_connect($host, $user, $pass);
mysql_select_db($db, $conn);
mysql_query("SET NAMES utf8");
$sql = "SELECT * FROM net_members";
$query = mysql_query($sql, $conn);
while ($row = mysql_fetch_assoc($query)) {
// 檢查是否已存在
$check = mysql_query("SELECT uid FROM uc_members WHERE username='{$row['username']}'");
if (mysql_num_rows($check) > 0) continue;
// UCenter 密碼規則:md5(md5($password) . $salt)
$salt = substr(uniqid(rand()), -6);
$password = md5(md5($row['password']) . $salt);
// 寫入 uc_members
$ins_sql = "INSERT INTO uc_members
(uid, username, password, email, regdate, lastlogintime, salt)
VALUES
({$row['id']}, '{$row['username']}', '$password', '{$row['email']}', {$row['add_time']}, {$row['last_login']}, '$salt')";
mysql_query($ins_sql);
// 寫入 uc_memberfields(空擴充欄位)
mysql_query("INSERT INTO uc_memberfields (uid) VALUES ({$row['id']})");
}
echo "所有用戶已匯入 UCenter";
?>
md5(md5($plain) . $salt)。id 作為 uid,避免關聯資料斷裂。regdate、lastlogintime 均為 Unix Timestamp。BEGIN; ... COMMIT;)確保資料一致性。uc_user_register() API。