php - 创建触发器以将新用户添加到 wordpress
问题描述
每次创建新用户时,我都需要将用户全名添加到 buddy press 扩展配置文件字段。这是正常功能,但我们正在从 Active Directory 同步用户,并且在运行时不会填充用户名。我创建了一个 SQL 查询,用于组合名字和姓氏并将其更新到我需要的位置。尝试在 phpMyAdmin 中创建触发器时出现了我的问题。
这是我收到的错误:
以下查询失败:
CREATE TRIGGER `update users`
AFTER UPDATE ON `wp_bp_xprofile_data`
FOR EACH ROW
CREATE TEMPORARY TABLE user_data AS
SELECT u.user_id
, (SELECT meta_value FROM wp_usermeta WHERE user_id = u.user_id AND meta_key = 'first_name' LIMIT 1) AS first_name
, (SELECT meta_value FROM wp_usermeta WHERE user_id = u.user_id AND meta_key = 'last_name' LIMIT 1) AS last_name
, (SELECT `value` FROM wp_bp_xprofile_data WHERE user_id = u.user_id AND field_id = '1' LIMIT 1) AS bp_name
, (SELECT CONCAT(first_name, ' ', last_name)) AS full_name
FROM wp_bp_xprofile_data u ;
UPDATE wp_bp_xprofile_data u JOIN user_data b ON u.user_id=b.user_id
SET u.value=b.full_name;"
MySQL 说:#1064 - 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 12 行的“UPDATE wp_bp_xprofile_data u JOIN user_data b ON u.user_id=b.user_id”附近使用正确的语法
这是我使用的代码。
CREATE TEMPORARY TABLE user_data AS
SELECT
u.user_id,
(SELECT meta_value FROM wp_usermeta WHERE user_id = u.user_id AND meta_key = 'first_name' LIMIT 1) AS first_name,
(SELECT meta_value FROM wp_usermeta WHERE user_id = u.user_id AND meta_key = 'last_name' LIMIT 1) AS last_name,
(SELECT `value` FROM wp_bp_xprofile_data WHERE user_id = u.user_id AND field_id = '1' LIMIT 1) AS bp_name,
(SELECT CONCAT(first_name, ' ', last_name)) AS full_name
FROM
wp_bp_xprofile_data u
;
UPDATE wp_bp_xprofile_data u
JOIN user_data b
ON u.user_id=b.user_id
SET u.value=b.full_name;
解决方案
您尚未输入 BRGIN 或 ENd
尝试
DELIMITER //
CREATE TRIGGER `update users`
AFTER UPDATE ON `wp_bp_xprofile_data`
FOR EACH ROW
BEGIN
CREATE TEMPORARY TABLE user_data AS
SELECT u.user_id
, (SELECT meta_value FROM wp_usermeta WHERE user_id = u.user_id AND meta_key = 'first_name' LIMIT 1) AS first_name
, (SELECT meta_value FROM wp_usermeta WHERE user_id = u.user_id AND meta_key = 'last_name' LIMIT 1) AS last_name
, (SELECT `value` FROM wp_bp_xprofile_data WHERE user_id = u.user_id AND field_id = '1' LIMIT 1) AS bp_name
, (SELECT CONCAT(first_name, ' ', last_name)) AS full_name
FROM wp_bp_xprofile_data u ;
UPDATE wp_bp_xprofile_data u JOIN user_data b ON u.user_id=b.user_id
SET u.value=b.full_name;
END //
DELIMITER ;
但我不确定触发器是否会起作用,它只会删除语法错误。
据我所知,你不能更新调用触发器的表,因为你的更新也会调用一个新的触发器等等。
推荐阅读
- python - 从 CSV 转换为 Python DataFrame 中的分类数据
- python - 将新列添加到倒置二进制值的 ndarray | NumPy 数组 Python
- java - 无法构建 openfire-apns-plugin
- database - 如何通过最接近今天的数据查找记录
- c# - C#每次调用接口方法时添加自定义事件
- google-app-engine - 为什么 App Engine 实例会关闭并显示“启动”消息?
- javascript - 在 ktor httpClient(js) JS 引擎中忽略自签名证书的配置
- caching - 如何在nestJS中重置缓存拦截器的缓存值?
- python - 按时间窗口获取新的数据框
- spring-boot - Spring Boot - 兔子自定义 ConnectionFactory