PHP如何正则表达式获取SQL语句中的表名?

来源: WordPress导航主题    日期: 2022-9-6    标签:,     作者: WordPress导航主题   

有一个SQL语句集合,里面可能有selectselect ... left joinupdatedeleteinsert

要从这语句集合中获取到所有的表名,代码如下:

<?php function get_sql_tables($sqlString) {     $sqlString = str_replace( '`','',trim($sqlString) ).' AND 1=1 ';     $key = strtolower(substr($sqlString, 0, 6));     if( $key === 'select' ){         $tmp = explode('where' , strtolower( trim( $sqlString ) ) );         $tmp = explode('from',$tmp[0]);         if ( strpos($tmp[1],',') !== false && ! stristr( $tmp[1],'select')){             $tmp = explode( ',' , $tmp[1] );             foreach( $tmp as $k => $v ){                 $v = trim( $v );                 if( strpos( $v , ' ') !== false ){                     $tv = explode(' ' , $v);                     $return[] = $tv[0];                 }             }             return $return;         }else{             $expression = '/((SELECT.+?FROM)|(LEFT\s+JOIN|JOIN|LEFT))[\s`]+?(\w+)[\s`]+?/is';         }     }else if( $key === 'delete' ){         $expression = '/DELETE\s+?FROM[\s`]+?(\w+)[\s`]+?/is';     }else if( $key === 'insert' ){         $expression = '/INSERT\s+?INTO[\s`]+?(\w+)[\s`]+?/is';     }else if( $key === 'update' ){         $tmp = explode( 'set' , strtolower( str_replace('`','',trim( $sqlString ) ) ) );         $tmp = explode( 'update' , $tmp[0] );         if ( strpos($tmp[1] , ',' ) !== false && ! stristr( $tmp[1] , 'update' ) ){             $tmp = explode( ',' , $tmp[1] );             foreach( $tmp as $k => $v ){                 $v = trim( $v );                 if( strpos( $v , ' ') !== false ){                     $tv = explode(' ' , $v);                     $return[] = $tv[0];                 }             }             return $return;         }else{             $expression = '/UPDATE[\s`]+?(\w+)[\s`]+?/is';         }     }     preg_match_all($expression, $sqlString, $matches);     return array_unique(array_pop($matches)); }

使用姿势:

<?php $sql = "select count(*) as count from order as a left join user as b on a.user_id = b.user_id where a.title like '%老季%'"; var_dump(get_sql_tables());#输出结果:order和user  $sql = "select * from T_5 a, T_6 b , T_7 c where a.id=b.id"; var_dump(get_sql_tables());#输出结果:Array ( [0] => T_5 [1] => T_6 [2] => T_7 )

腾讯云限时秒杀【点击购买】

搬瓦工,CN2高速线路,1GB带宽,电信联通优化KVM,延迟低,速度快,建站稳定,搬瓦工BandwagonHost VPS优惠码BWH26FXH3HIQ,支持<支付宝> 【点击购买】!

Vultr$3.5日本节点,512M内存/500G流量/1G带宽,电信联通优化,延迟低,速度快【点击购买】!

阿里云香港、新加坡VPS/1核/1G/25G SSD/1T流量/30M带宽/年付¥288【点击购买】

PHP如何正则表达式获取SQL语句中的表名?

`微信`扫码 加好友

链接到文章: https://gkxyz.com/phpruhezhengzebiaodashihuoqusqlyujuzhongdebiaoming.html

推荐站点

  • Vultr

    Vultr Global Cloud Hosting – Brilliantly Fast SSD […]

  • 腾讯云 – 产业智变 云启未来

    腾讯云为数百万的企业和开发者提供安全稳定的云计算服务,涵盖云服务器、云数据库、云存储、视频与CDN、域名注册等 […]

  • 站长工具 – 站长之家

    站长工具是站长的必备工具。经常上站长工具可以了解SEO数据变化。还可以检测网站死链接、蜘蛛访问、HTML格式检 […]

  • 腾讯视频 – 中国领先的在线视频媒体平台,海量高清视频在线观看

    腾讯视频致力于打造中国领先的在线视频媒体平台,以丰富的内容、极致的观看体验、便捷的登录方式、24小时多平台无缝 […]

  • RAKsmart

    主机商介绍:RAKsmart是知名的美国服务器租用商,包括美国站群服务器、美国cn2服务器、香港服务器等热门产 […]

  • 观察者网

    观察者网,致力于荟萃中外思想者精华,鼓励青年学人探索,建中西文化交流平台,为崛起中的精英提供决策参考。

评论已关闭