MySQL查询-获取服务器上所有WP站点的所有WP管理员电子邮件地址列表

luaexgnf  于 2022-12-17  发布在  Mysql
关注(0)|答案(1)|浏览(110)

我有很多可湿性粉剂网站设置在我的服务器上,我正试图获得所有的可湿性粉剂网站注册的管理员电子邮件地址列表。
服务器使用WHM/cPanel和MariaDB。
我希望WordPress工具包可以做到这一点开箱即用,但它似乎不能。
我是一个SQL新手,对于我的SQL查询,对于单个数据库,我只做到了这一点:

SELECT option_value
  FROM `database_name`.`wp_options`
 WHERE option_name="admin_email"

另一个问题是,服务器上的许多WP数据库不使用标准的wp_ table前缀,而是使用随机字符串,因此我还需要在表名中使用通配符的方法,如

  • _选项

所以我的两个问题是:
1.在服务器上的所有数据库中循环查询
1.使查询在表名中使用通配符
这可能吗?

cdmah0mi

cdmah0mi1#

是的。它有两个查询,首先生成SQL,然后执行它。
设置示例:

MariaDB [(none)]> create database rr;
Query OK, 1 row affected (0.000 sec)

MariaDB [(none)]> create database ss;
Query OK, 1 row affected (0.001 sec)

MariaDB [(none)]> create table ss.wp_options(option_name varchar(30), option_value varchar(30));
Query OK, 0 rows affected (0.003 sec)

MariaDB [(none)]> create table rr.rr_options(option_name varchar(30), option_value varchar(30));
Query OK, 0 rows affected (0.003 sec)

MariaDB [(none)]> insert into ss.wp_options values ('admin_email', 'me@ss');
Query OK, 1 row affected (0.003 sec)

MariaDB [(none)]> insert into rr.rr_options values ('admin_email', 'me@rr');
Query OK, 1 row affected (0.002 sec)

然后使用information_schema.TABLES生成查询,使用UNION ALL将它们连接起来:

SELECT group_concat(
  concat('select "', TABLE_SCHEMA, '" as db, option_value from ', TABLE_SCHEMA, '.', TABLE_NAME, ' WHERE option_name="admin_email"')
 SEPARATOR ' UNION ALL ') INTO @sql
FROM information_schema.TABLES
WHERE TABLE_NAME LIKE '%_options';

只是为了展示我们产生的结果:

MariaDB [(none)]> select @sql\G
*************************** 1. row ***************************
@sql: select "ss" as db, option_value from ss.wp_options WHERE option_name="admin_email"
  UNION ALL select "rr" as db, option_value from rr.rr_options WHERE option_name="admin_email"

Execute immediate运行一个查询,就像一个没有setup和run、shutdown步骤的预准备语句:

MariaDB [(none)]> execute immediate @sql;
+----+--------------+
| db | option_value |
+----+--------------+
| ss | me@ss        |
| rr | me@rr        |
+----+--------------+
2 rows in set (0.002 sec)

相关问题