我想用 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/