jdorn/sql-formatter 是一個輕量級的 PHP 類用於格式化 SQL 語句。
它支援自動進行縮排、新增換行,甚至還支援語法高亮。
在命令列內使用
該擴充套件包包含一個 bin/sql-formatter 可執行檔案,可直接用於命令列格式化 SQL。
使用 Composer 全域性安裝後便可使用該命令了:
composer global require jdorn/sql-formatter
sql-formatter "SELECT SOME QUERY;" // 直接格式化
// 或
echo "SELECT SOME QUERY;" | sql-formatter // 使用管道,更適合較大量的 SQL 語句
作為擴充套件包使用
SqlFormatter
類包含一個名為 format
的靜態方法,它可以接收一個 SQL 語句字串作為引數,並返回格式化後使用 pre
標籤包裹的 HTML 程式碼。
例如:
<?php
require_once('SqlFormatter.php');
$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 SqlFormatter::format($query);
輸出:
只格式化不高亮
若是不需要高亮,只需要新增縮排和換行,請將第二個引數設定為 false
即可。
適用於輸出錯誤日誌或者其它非 HTML 資料時。
<?php
echo SqlFormatter::format($query, false);
輸出:
只高亮不格式化
有個單獨的方法名為 highlight
能夠保證原有的格式不被改動,只新增語法高亮。
適用於 SQL 已經被良好格式化,需讓它更加易讀時。
壓縮查詢語句
compress
方法可刪除所有的 SQL 註釋,並壓縮不必要的空格。
適用於輸出多條查詢語句,並使其易於複製貼上到命令列時。
-- 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 SqlFormatter::compress($query);
輸出:
SELECT Id as temp, DateCreated as Created FROM MyTable;
刪除註釋
如果你需要保留原有格式,但仍需刪除 SQL 註釋,你可以使用 removeComments
方法來代替 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 SqlFormatter::removeComments($query);
輸出:
SELECT
Id
as temp, DateCreated as Created FROM MyTable;
將多條 SQL 語句分割為陣列
還有一個與格式化無關的特性,能夠將多條 SQL 語句分離為陣列。
例如:
DROP TABLE IF EXISTS MyTable;
CREATE TABLE MyTable ( id int );
INSERT INTO MyTable (id)
VALUES
(1),(2),(3),(4);
SELECT * FROM MyTable;
$queries = SqlFormatter::splitQuery($sql);
結果:
DROP TABLE IF EXISTS MyTable;
CREATE TABLE MyTable ( id int );
INSERT INTO MyTable (id) VALUES (1),(2),(3),(4);
SELECT * FROM MyTable;
為何不使用正規表示式?
去看看 README 吧~https://github.com/jdorn/sql-formatter#why-not-regular-expressions。