仅显示返回的MySQL查询的一部分?

时间:2016-02-16 18:31:09

标签: php mysql wordpress

我正在尝试过滤掉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%')

2 个答案:

答案 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对其进行调试输出。)