Php 将列链接到不同的表
好吧,我不认为这是可能的,但我想确定一下。假设我有一个名为wp_users和forum_users的表。在wp_用户中有用户名、电子邮件和md5哈希列。论坛用户也是如此。有没有一种方法可以将这两种方法进行同步Php 将列链接到不同的表,php,mysql,Php,Mysql,好吧,我不认为这是可能的,但我想确定一下。假设我有一个名为wp_users和forum_users的表。在wp_用户中有用户名、电子邮件和md5哈希列。论坛用户也是如此。有没有一种方法可以将这两种方法进行同步 INSERT INTO wp_users (username, password, email) VALUES ('$_POST[username]', '$_POST[password]', '$_POST[email]'); 会自动完成吗 INSERT INTO forum_use
INSERT INTO wp_users (username, password, email)
VALUES ('$_POST[username]', '$_POST[password]', '$_POST[email]');
会自动完成吗
INSERT INTO forum_users (username, password, email)
VALUES ('$_POST[username]', '$_POST[password]', '$_POST[email]');
与ALTER等相同。使用事务
BEGIN
INSERT INTO wp_users (username, password, email)
VALUES ('$_POST[username]', '$_POST[password]', '$_POST[email]');
INSERT INTO forum_users (username, password, email)
VALUES ('$_POST[username]', '$_POST[password]', '$_POST[email]');
COMMIT;
您可以利用MySQL触发器来自动执行此操作
CREATE TRIGGER after_insert_wp_users
AFTER INSERT ON wp_users FOR EACH ROW
BEGIN
INSERT INTO forum_users (username, password, email)
VALUES (NEW.username, NEW.password, NEW.email);
END
您可以对更新和其他查询执行相同的操作
编辑1:
CREATE TRIGGER after_insert_wp_users
AFTER INSERT ON wp_users FOR EACH ROW
BEGIN
IF @__disable_trigger_users = 1 THEN
SET @__disable_trigger_users = NULL;
ELSE
SET @__disable_trigger_users = 1;
INSERT INTO forum_users (username, password, email)
VALUES (NEW.username, NEW.password, NEW.email);
END IF;
END
CREATE TRIGGER after_insert_forum_users
AFTER INSERT ON forum_users FOR EACH ROW
BEGIN
IF @__disable_trigger_users = 1 THEN
SET @__disable_trigger_users = NULL;
ELSE
SET @__disable_trigger_users = 1;
INSERT INTO wp_users (username, password, email)
VALUES (NEW.username, NEW.password, NEW.email);
END IF;
END
在这种情况下,两个表都需要自动更新,即如果在表wp\u users
中插入一行,它将自动插入forum\u users
中,反之亦然,编写第二组触发器从forum\u users更新wp\u users表将引入递归循环
DROP PROCEDURE IF EXISTS proc_insert_user
GO
CREATE PROCEDURE proc_insert_user
(
IN p_username VARCHAR(15),
IN p_password VARCHAR(15),
IN p_email VARCHAR(15)
)
BEGIN
INSERT INTO wp_users (username, password, email)
VALUES (p_username, p_password, p_email);
INSERT INTO forum_users (username, password, email)
VALUES (p_username, p_password, p_email);
END
GO
CALL proc_insert_user('$_POST[username]', '$_POST[password]', '$_POST[email]')
GO
为了避免这种情况,我们可以使用一个状态变量来检查是否应该进行二次插入
触发器1:
CREATE TRIGGER after_insert_wp_users
AFTER INSERT ON wp_users FOR EACH ROW
BEGIN
IF @__disable_trigger_users = 1 THEN
SET @__disable_trigger_users = NULL;
ELSE
SET @__disable_trigger_users = 1;
INSERT INTO forum_users (username, password, email)
VALUES (NEW.username, NEW.password, NEW.email);
END IF;
END
CREATE TRIGGER after_insert_forum_users
AFTER INSERT ON forum_users FOR EACH ROW
BEGIN
IF @__disable_trigger_users = 1 THEN
SET @__disable_trigger_users = NULL;
ELSE
SET @__disable_trigger_users = 1;
INSERT INTO wp_users (username, password, email)
VALUES (NEW.username, NEW.password, NEW.email);
END IF;
END
触发器2:
CREATE TRIGGER after_insert_wp_users
AFTER INSERT ON wp_users FOR EACH ROW
BEGIN
IF @__disable_trigger_users = 1 THEN
SET @__disable_trigger_users = NULL;
ELSE
SET @__disable_trigger_users = 1;
INSERT INTO forum_users (username, password, email)
VALUES (NEW.username, NEW.password, NEW.email);
END IF;
END
CREATE TRIGGER after_insert_forum_users
AFTER INSERT ON forum_users FOR EACH ROW
BEGIN
IF @__disable_trigger_users = 1 THEN
SET @__disable_trigger_users = NULL;
ELSE
SET @__disable_trigger_users = 1;
INSERT INTO wp_users (username, password, email)
VALUES (NEW.username, NEW.password, NEW.email);
END IF;
END
编辑2
您也可以使用MySQL存储过程来实现同样的功能
DROP PROCEDURE IF EXISTS proc_insert_user
GO
CREATE PROCEDURE proc_insert_user
(
IN p_username VARCHAR(15),
IN p_password VARCHAR(15),
IN p_email VARCHAR(15)
)
BEGIN
INSERT INTO wp_users (username, password, email)
VALUES (p_username, p_password, p_email);
INSERT INTO forum_users (username, password, email)
VALUES (p_username, p_password, p_email);
END
GO
CALL proc_insert_user('$_POST[username]', '$_POST[password]', '$_POST[email]')
GO
我说的是数据库结构本身,这样你就不必使用它了。我想设置现有的数据库结构,以便在不修改核心文件的情况下同时更新论坛和wordpress站点数据库。因此,要完全同步它们,我可以这样做,只需更改值,以便您可以通过论坛更新wp数据库?对。您可以从
forum\u users
表中为更新wp\u用户
表编写类似的触发器。需要检查这是否会产生某种循环/死锁…我已经为上面的循环问题添加了一个解决方案。我已经编辑了这篇文章,以包含使用存储过程的替代解决方案。希望有帮助。