gpt4 book ai didi

php - 在查询中获取 mysql 表

转载 作者:行者123 更新时间:2023-11-29 07:12:54 25 4
gpt4 key购买 nike

有什么方法可以获取我在查询中使用的表?

我使用的第一种方法是使用正则表达式:

// result[1] = "SELECT"
// result[3] = "All between FROM and WHERE, ex: `users`, ex: `users`, `test`

if($result[1] == "SELECT" && !preg_match('/FROM\s*(.*?,.*?)\s*WHERE/i', $query, $res))
{
$tables = preg_replace('/`|\'|\s/i', '', $result[3]); // strip ` or ' or spaces
$tables = explode(",", $tables);
sort($tables);
}

但是有复杂的mysql查询,所以我接下来使用的方法是:

EXPLAIN SELECT...

并从结果数组中获取表格。

问题来自计数,我知道在 MyISAM 数据库中存储行数,所以如果您执行下一个查询:

SELECT COUNT(*) FROM users

你没有得到查询中使用的表,你得到“选择优化的表”,因为使用了任何表。

那么,还有另一种获取查询中使用的表的方法吗?

最佳答案

我正在做的是同时使用这两种方法。

private function get_tables($query)
{
$res = preg_match('/^(SELECT|UPDATE|INSERT|DELETE)(.+?FROM| INTO)?\\s*`?(.+?)($|`| |\\()/i', $query, $result);

if(!$res)
return false;

$tmp_tables = array();

// Get array tables using EXPLAIN
if($result[1] == "SELECT")
$tmp_tables = $this->get_select_query_tables($query);

// Get array tables using REGEX
if($result[1] == "SELECT" && !preg_match('/FROM\s*(.*?,.*?)\s*WHERE/i', $query, $res))
{
$tables = preg_replace('/`|\'|\s/i', '', $result[3]);
$tables = explode(",", $tables);
sort($tables);

$tmp = $tables;

// Check if all REGEX tables are in EXPLAIN tables, if not, add the missed
foreach($tmp as $tmp_table)
if(!in_array($tmp_table, $tmp_tables))
$tmp_tables[] = $tmp_table;
}

return $tmp_tables;
}

关于php - 在查询中获取 mysql 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3397568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com