在PHP字符串中格式化MySQL代码

Joh*_*hnA 23 php mysql format

是否有任何程序IDE可以在PHP字符串中格式化MySQL代码,例如我使用PHPStorm IDE而它无法做到.

它适用于PHP和MYSQL,但不适用于PHP字符串中的MYSQL.我准备使用新的IDE,因为现在我必须手动格式化数百个一行且不可读的数据库请求.我选择的唯一标准是ide可以自动执行.

<?php
...
$request1 = "select * from tbl_admin where admin_id= {$_SESSION['admin_id']} and active= 1 order By admin_id Asc";
...
?>
Run Code Online (Sandbox Code Playgroud)

应该成为

<?php
...
$request1 = "SELECT * 
               FROM tbl_admin 
                  WHERE admin_id = {$_SESSION['admin_id']}
                  AND active = 1
                      ORDER BY admin_id ASC";
...
?>
Run Code Online (Sandbox Code Playgroud)

ehi*_*ime 17

在我看来,最好的方法是使用正则表达式或SED/AWK格式化所有内容,它为我们提供了动态替换地图的奖励.你可能遇到代码错误的可能性很高,所以它很难.

让我稍微研究一下,我可以看看我是否能想出一个好的解决方案.是否保证您将所有SQL封装在双引号中?

编辑

试试这个

cd {{directory}} && find . -type f -print0 |
  xargs -0 perl -i.bak -pe 's/select/SELECT/g ; s/from/\n\tFROM/g ; s/where/\n\t\tWHERE/g ; s/and/\n\t\tAND/g ; s/order by/\n\t\tORDER BY/g ; s/asc/ASC/g ; s/desc/DESC/g ;'
Run Code Online (Sandbox Code Playgroud)

这是一个例子

$ printf '"select * from whatever where this = that and active = 1 order by something asc";\n' |
> perl -pe 's/select/SELECT/g ; s/from/\n\tFROM/g ; s/where/\n\t\tWHERE/g ; s/and/\n\t\tAND/g ; s/order by/\n\t\tORDER BY/g ; s/asc/ASC/g ; s/desc/DESC/g ;'

"SELECT * 
    FROM whatever 
        WHERE this = that 
        AND active = 1 
        ORDER BY something ASC";
Run Code Online (Sandbox Code Playgroud)

它漂亮吗?不,完全没有,它是否有效.... Yeup.

我会尝试创建一个过滤器文件,也许还有一些bash程序或其他东西,因为我有时间运行这个热点.

编辑

这是一些修改后的代码,看起来更漂亮(sorta)

printf '$request1 = "select * from whatever where this = that and active = 1 order by something asc";\n' | 
perl -pe 's/select/SELECT/gi ; s/from/\n  FROM/gi ; s/where/\n    WHERE/gi ; s/and/\n    AND/gi ; s/order by/\n      ORDER BY/gi ; s/asc/ASC/gi ; s/desc/DESC/gi ;' | 
awk 'NR == 1 {pad = length($0)/2; print} NR > 1 {gsub(/\r/,""); printf "%*s%s\n", pad, " ", $0}'

__OUTPUTS__
$request1 = "SELECT * 
             FROM whatever 
               WHERE this = that 
               AND active = 1 
                 ORDER BY something ASC";
Run Code Online (Sandbox Code Playgroud)

  • 它要求OP编写自己的Netbeans插件,这是一步之遥. (2认同)

Kin*_*nch 12

正如我所知,PhpStorm可以做到这一点,如果你使用heredoc语法

$request1 = <<<SQL
   SELECT * 
           FROM tbl_admin 
              WHERE admin_id = {$_SESSION['admin_id']}
              AND active = 1
                  ORDER BY admin_id ASC
SQL;
Run Code Online (Sandbox Code Playgroud)

  • 这意味着我还要改变数百个请求......这是我从其他开发人员那里获得的非常大的项目,我无法手动更改每个请求.PS我不想使用heredoc语法. (2认同)

Uğu*_*han 5

答案是不.

作为替代解决方案,我建议将文本(*.php文件中的所有PHP代码)复制到Heidisql的查询编辑器中,单击重新格式化并复制回NetBeans并按Alt + Shift + F. 这将格式化sql并格式化php代码,保留sql格式.所以不是插件,而是复制,格式化整个文件,再次复制和格式化.

您可以使用此工具代替HeidiSQL,如果您熟悉这些Web工具,则可以使用此工具.

如果你想要更多的自动化,你可以使用netbeans的正则表达式支持格式化反斜杠n = \n为新行格式每次"插入,更新删除,选择,在哪里和值"运行这6次的术语将替换所有"插入" < - blank plus insert,在您的项目中使用新行.你可以编写一个正则表达式来搜索所有,"空白加保留字",组合并用新行替换它们.

您也可以像搜索"插入"一样使用它,并使用"\n\t insert"重新编译,这会创建一个新行和一个标签

在此输入图像描述