sql parser

其他类别 2025-08-24

sql parser

验证的SQL Lexer和解析器,重点是MySQL方言。

代码状态

安装

请使用作曲家安装:

composer require phpmyadmin/sql-parser

文档

API文档可在https://develdocs.*ph*pmya*dmin.net/sql-parser/上获得。

用法

命令行实用程序

命令行实用程序到语法突出显示SQL查询:

./vendor/bin/sql-parser --highlight --query " SELECT 1 "

命令行实用程序至lint sql查询:

./vendor/bin/sql-parser --lint --query " SELECT 1 "

命令行实用程序以使SQL查询:

./vendor/bin/sql-parser --tokenize --query " SELECT 1 "

所有命令都能够从stdin(标准IN)解析输入,例如:

 echo " SELECT 1 " | ./vendor/bin/sql-parser --highlight
cat example.sql | ./vendor/bin/sql-parser --lint

格式化SQL查询

 echo PhpMyAdmin  SqlParser  Utils Formatter:: format ( $ query , [ ' type ' => ' html ' ]);

发现查询类型

 use PhpMyAdmin  SqlParser  Parser ;
use PhpMyAdmin  SqlParser  Utils  Query ;

$ query = ' OPTIMIZE TABLE tbl ' ;
$ parser = new Parser ( $ query );
$ flags = Query:: getFlags ( $ parser -> statements [ 0 ]);

echo $ flags -> queryType ?->value;

解析和构建SQL查询

 require __DIR__ . ' /vendor/autoload.php ' ;

$ query1 = ' select * from a ' ;
$ parser = new PhpMyAdmin  SqlParser  Parser ( $ query1 );

// inspect query
var_dump ( $ parser -> statements [ 0 ]); // outputs object(PhpMyAdminSqlParserStatementsSelectStatement)

// modify query by replacing table a with table b
$ table2 = new  PhpMyAdmin  SqlParser  Components  Expression ( '' , ' b ' , '' , '' );
$ parser -> statements [ 0 ]-> from [ 0 ] = $ table2 ;

// build query again from an array of object(PhpMyAdminSqlParserStatementsSelectStatement) to a string
$ statement = $ parser -> statements [ 0 ];
$ query2 = $ statement -> build ();
var_dump ( $ query2 ); // outputs string(19) 'SELECT  * FROM `b` '

// Change SQL mode
PhpMyAdmin  SqlParser Context:: setMode ( PhpMyAdmin  SqlParser Context:: SQL_MODE_ANSI_QUOTES );

// build the query again using different quotes
$ query2 = $ statement -> build ();
var_dump ( $ query2 ); // outputs string(19) 'SELECT  * FROM "b" ' 

本土化

您可以本地化的错误消息安装phpmyadmin/motranslator版本5.0或更新:

composer require phpmyadmin/motranslator:^5.0

从您的环境中自动检测到该语言环境,您也可以设置一个不同的语言环境

来自CLI

LC_ALL=pl ./vendor/bin/sql-parser --lint --query " SELECT 1 "

来自PHP

 require __DIR__ . ' /vendor/autoload.php ' ;

PhpMyAdmin  SqlParser Translator:: setLocale ( ' pl ' );

$ query1 = ' select * from a ' ;
$ parser = new PhpMyAdmin  SqlParser  Parser ( $ query1 );

更多信息

该库最初是在2015年Google Summer of Code中创建的,自4.5版以来,PhpMyAdmin已使用。

下载源码

通过命令行克隆项目:

git clone https://github.com/phpmyadmin/sql-parser.git