php - 如何使用 php 从 mysql 查询中提取表名?

标签 php mysql regex

我想用 php 检测 mysql 查询中的所有表。我看到了适用于普通查询的 mysql_field_table() 函数。但是当你为表使用替代名称时(table_name AS new_name)它返回替代名称而不是真实名称,我如何通过正则表达式修复它。但现在我的问题是像这样的高级查询:

SELECT mail_id, mail_date, mail_from, mail_to, mail_subject, (
            (
            SELECT COUNT(*)
            FROM `sys_messagecenter_qmails`
            WHERE qmail_mail_id = mail_id
            ) + (
            SELECT COUNT(*)
            FROM `sys_messagecenter_rels`
            WHERE rel_mail_id = mail_id
            )
            ) AS email_total, (
            SELECT COUNT(*)
            FROM `sys_messagecenter_rels`
            WHERE rel_mail_id = mail_id
            ) AS email_sent, (
            SELECT COUNT(*)
            FROM `sys_messagecenter_rels`
            INNER JOIN `sys_email_receives` ON receive_reply_to = rel_sent_id
            WHERE rel_mail_id = mail_id
            ) AS email_reply FROM `sys_messagecenter_emails` WHERE mail_draft='No' 
ORDER BY mail_id ASC LIMIT 0,10 

现在我想我需要一些正则表达式来检测查询中的所有真实表名。或任何其他完美的解决方案。我该怎么做?

最佳答案

抱歉...这里有一个提取它的解决方案(如果您在 $query 中查询)

if(preg_match_all('/((FROM|JOIN) `(.*)`)/', $query, $matches)) {
    $tables = array_unique($matches[3]);
    print_r($tables);
}

关于php - 如何使用 php 从 mysql 查询中提取表名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11010901/

相关文章:

php - 通过 php 中的 ssh 连接隧道请求

PHP字符串到多级数组

php - 用 php 以人类可读的格式显示 mysql 日期时间?

mysql - on 子句中的未知列,无法在工作台中重现

mysql - 根据另一个表的匹配进行分组

Node.JS 字符串仅匹配第一个字符

regex - 为什么我们应该在正则表达式中更喜欢否定字符类而不是 .* ?

c# - 如何搜索包含 2 个特定字符串的所有文件?

javascript - PHP 单击链接而不是行切换

mysql - LEFT JOIN - 缩小范围