doctrine/sql-formatter

一个 PHP SQL 突出显示库

安装数量: 98,316,128

依赖者: 54

建议者: 4

安全性: 0

星标: 1,662

关注者: 9

分支: 20

开放性问题: 13

语言:HTML

1.4.1 2024-08-05 20:32 UTC

This package is auto-updated.

Last update: 2024-09-11 07:29:45 UTC


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);

输出

formatted output with HTML Highlight

当你以 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);

输出

HTML Highlight output

压缩查询

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;