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(PhpMyAdmin\\SqlParser\\Statements\\SelectStatement) // 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(PhpMyAdmin\\SqlParser\\Statements\\SelectStatement) 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已使用。
