php - 使用 PHP 从任何选择查询中提取表名

标签 php mysql

我试图从使用 PHP 的查询中获取所有表名,使用此函数我得到了除多个表的 JOINS 之外的所有条件,请帮助我也使用相同的函数提取 JOIN 查询。

private function get_tables($query)
{
    $arr        =   explode("FROM", $query);
    $second     =   $arr[1];

    if($second==""){
        $arr    =   explode("from", $query);
        $second =   $arr[1];
    }

    $consts =   array('where','order', 'group', 'limit');
    $check=1;

    for($i=0;$i<count($consts); $i++)
    {
      if((stristr($second,$consts[$i])  !=  '')&&($check==1))
      {
          $where    =   explode($consts[$i],$second);
          if($check == 1)
          {
              $check=2;
              $tables= $where[0];
          }
      }
    }
    if($check == 1)
    {
      $tables= $arr[1]; 
    }
    $tab_arr    =   explode(',',$tables);
    $name_arr   =   array();

    foreach($tab_arr as $name)
    {
      if($name != '')
      { 
          $name =   trim($name);
          $narr =   explode(' ',$name);     
          $name_arr[]   =   $narr[0];
      }

    }
    $name_arr   =   array_unique($name_arr);
    return $name_arr;
}

最佳答案

你不能用简单的正则表达式匹配来解析 SQL...当表被别名时会发生什么?什么时候有子查询?交叉连接?工会?等等。SQL语法相当丰富。

寻找 SQL 解析器。例如:

https://code.google.com/p/php-sql-parser/

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

相关文章:

MySQL 错误 1064 语法但一切似乎都很好

MySQL 日期通配符性能

mysql - 我的sql代码哪里出了问题?

javascript - 如何在 yii2 中创建依赖的 select 2 下拉菜单?

php - 全局登录(许多站点)

php - 如何取消设置 PHP 数组中的数字索引元素?

php - 为 php `str_len ` 获得与 jQuery `.val().length()` 相同的结果

php - 在mysql存储过程中使用fetch table获取表信息

mysql - 使用 COUNT 返回不同的结果

mysql - SPRING BOOT手动War文件部署到Tomcat并重启服务器,不创建数据库