使用SQL查询更新用户元数据

时间:2014-03-05 作者:the gearbox

我有一个Wordpress网站,需要导入9000多名用户才能建立目录列表。我从一个现有的MySQL(非wordpress)数据库导入了它们,导入的一切都很好。用户名、密码和显示名(MD5哈希,但我已测试,WP将在第一次登录时将密码更改为phpass)。

事情是。。。它们都是在用户角色为NONE的情况下导入的。我需要将此更改为订阅服务器。现在,我可以进入phpMyAdmin,在wp\\u usermeta表中可以看到wp\\u capabilities字段。我可以看到我的管理员帐户是a:1:{s:13:“管理员”;b:1;}我知道订阅者是a:1:{s:10:“订阅者”;b:1;}。

我还可以看到,在每个user\\u id中输入了许多值。问题是?如何编写一个大容量MySQL命令来添加值wp\\u capabilites=\'a:1:{s:10:“订阅者”;b:1;}\'输入除1、2和3之外的每个用户id,即新导入的用户?

提前感谢!

1 个回复
SO网友:s_ha_dum

如何编写一个大容量MySQL命令来添加wp\\u capabilites=\'a:1:{s:10:“订阅者”;b:1;}\'输入除1、2和3之外的每个user\\u id,即新导入的用户?

你没有。那是serialized 数组,它是一个PHP构造。MySQL不知道如何处理它。对于数据库来说,它只是一个字符串。对于PHP来说,它是一个数组的表示——一个图表,PHP对此非常重视。如果中有一个字符出错,则不会取消序列化。如果您只是复制一个固定字符串,您可能可以使用SQL 但您不是--“我还可以看到,每个user\\u id中输入了许多值”。要在这些字符串中“插入”日期,您必须在SQL中重新生成PHP序列化。

让核心为您完成工作:

$args = array(
  \'exclude\' => array(1,2,3),
);
$users = get_users($args);
foreach ($users as $u) {
  $u->set_role(\'subscriber\');
}

结束

相关推荐

$wpdb和MySQL CREATE触发器

做$wpdb\'s方法不接受MySQLCREATE TRIGGER 查询我试过了$wpdb->query( $sql_trigger ) 一次又一次没有成功。在phpMyAdmin上抛出create trigger查询触发器被创建,因此查询看起来很好。$sql_trigger = \"DELIMITER // CREATE TRIGGER triggerName BEFORE UPDATE