我正在尝试过滤掉MySQL查询的结果。我从Wordpress数据库中提取数据。具体来说,我试图只提取用户角色。
在Wordpress中,返回的值如下所示:
a:1:{s:13:"administrator";s:1:"1";}
我想要看到的只是"管理员","作者","订阅者"等,而不是所有其他信息。
根据我的理解(但我非常初学者),我不能使用substr(),因为字符的长度不同,角色之前的信息也不同。
无论如何都要过滤掉所有其他信息,然后返回"管理员"在MySQL查询中直接?
这是我当前的查询(我还从另一个表中提取姓名,电子邮件地址,密码等):
SELECT wp_users.ID, wp_users.user_email, wp_users.user_pass, wp_users.display_name, wp_usermeta.user_id, wp_usermeta.meta_value
FROM wp_users
JOIN wp_usermeta
ON wp_users.ID = wp_usermeta.user_id
WHERE (wp_usermeta.meta_value LIKE '%admin%')
OR (wp_usermeta.meta_value LIKE '%author%')
OR (wp_usermeta.meta_value LIKE '%subscriber%')
答案 0 :(得分:1)
字符串是PHP序列化的(通过serialize()
PHP函数序列化)。
首先你需要反序列化:
$dbValue = 'a:1:{s:13:"administrator";s:1:"1";}';
$arr = unserialize($dbValue)
print_r($arr);
哪个输出:
array(1) {
["administrator"]=>
string(1) "1"
}
如果您确定,角色/用户组将始终是第一位的,您可以将其视为。
$role = array_keys($arr)[0];
我解决了你的问题吗?
答案 1 :(得分:1)
这是PHP的serialization数据格式,因此您只需使用unserialize
将其解析回可用的数据结构。
(如果您不完全确定该数据结构包含哪些内容,请使用var_dump
对其进行调试输出。)