doctrine / sql-formatter
一个 PHP SQL 突出显示库
Requires
- php: ^8.1
Requires (Dev)
- doctrine/coding-standard: ^12
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10.5
- vimeo/psalm: ^5.24
README
一个用于格式化 SQL 语句的轻量级 PHP 包。
除了语法突出显示外,它还可以自动缩进和添加换行。
历史记录
此包是从 https://github.com/jdorn/sql-formatter 分支出来的。以下是原始历史记录部分的说明
我发现自己经常需要调试自动生成的 SQL 语句,并希望有一种简单的方法来输出格式化的 HTML,而无需包含庞大的库或将内容粘贴到在线格式化器中。
我最初计划从 PhpMyAdmin 中提取格式化代码,但这需要 10,000+ 行代码并使用全局变量。
我看到其他人也有同样的问题,并以 Stack Overflow 用户 losif 的答案作为起点。 http://stackoverflow.com/a/3924147
—— @jdorn
用法
SqlFormatter
类有一个名为 format
的方法,它接受一个 SQL 字符串作为输入,并返回一个格式化块。
示例用法
<?php require_once 'vendor/autoload.php'; use Doctrine\SqlFormatter\SqlFormatter; $query = "SELECT count(*),`Column1`,`Testing`, `Testing Three` FROM `Table1` WHERE Column1 = 'testing' AND ( (`Column2` = `Column3` OR Column4 >= NOW()) ) GROUP BY Column1 ORDER BY Column3 DESC LIMIT 5,10"; echo (new SqlFormatter())->format($query);
输出
当你以 CLI 运行 php 并实例化 SqlFormatter
而不带任何参数时,会用 CliHighlighter
突出显示。
SqlFormatter
构造函数接受 Highlighter
实现,如 HtmlHighlighter
等。
仅格式化
如果你不想要语法突出显示,只想添加缩进和换行,请将 NullHighlighter
实例作为第二个参数传递。
这对于输出到错误日志或其他非 HTML 格式非常有用。
<?php use Doctrine\SqlFormatter\NullHighlighter; use Doctrine\SqlFormatter\SqlFormatter; echo (new SqlFormatter(new NullHighlighter()))->format($query);
输出
SELECT
count(*),
`Column1`,
`Testing`,
`Testing Three`
FROM
`Table1`
WHERE
Column1 = 'testing'
AND (
(
`Column2` = `Column3`
OR Column4 >= NOW()
)
)
GROUP BY
Column1
ORDER BY
Column3 DESC
LIMIT
5, 10
仅语法突出显示
有一个名为 highlight
的独立方法,它保留所有原始空白并仅添加语法突出显示。
这对于已经格式良好的 SQL,但需要更容易阅读的情况非常有用。
<?php echo (new SqlFormatter())->highlight($query);
输出
压缩查询
compress
方法删除所有注释并压缩空白。
这对于可以轻松复制粘贴到命令行的查询非常有用。
-- This is a comment SELECT /* This is another comment On more than one line */ Id #This is one final comment as temp, DateCreated as Created FROM MyTable;
echo (new SqlFormatter())->compress($query);
输出
SELECT Id as temp, DateCreated as Created FROM MyTable;