Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Formatieren Sie den MySQL-Code innerhalb des PHP-Strings

Der beste Weg, dies zu tun, ist meiner Meinung nach die Verwendung von Regular Expressions oder SED/AWK, um alles zu formatieren, es gibt uns den Bonus von Ersatzkarten im laufenden Betrieb. Die Wahrscheinlichkeit, dass Sie Codefehler haben, ist jedoch hoch, also ist es ziemlich schwierig.

Lassen Sie mich ein bisschen daran arbeiten und ich kann sehen, ob ich eine gute Lösung finden kann. Ist garantiert, dass Sie alle SQL-Befehle in doppelte Anführungszeichen setzen?

BEARBEITEN

Versuchen Sie dies

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

Hier ist ein Beispiel

$ 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";

Ist es hübsch? Nein, überhaupt nicht, funktioniert es.... Yeup.

Ich werde versuchen, eine Filterdatei und vielleicht ein kleines Bash-Programm oder so etwas zu erstellen, wenn ich Zeit finde, dieses heiße Durcheinander zu führen.

BEARBEITEN

Hier ist etwas überarbeiteter Code, sieht hübscher aus (irgendwie)

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