sql >> Database >  >> RDS >> Mysql

Formatteer MySQL-code in PHP-tekenreeks

De beste manier om dit naar mijn mening te doen is om reguliere expressies of SED/AWK te gebruiken om alles te formatteren, het geeft ons de bonus van vervangende kaarten ter plekke. De kans dat je codefouten hebt is echter groot, dus het is best lastig.

laat me er een beetje aan werken en ik kan kijken of ik een goede oplossing kan bedenken. Is het gegarandeerd dat u alle dubbele aanhalingstekens van SQL inkapselt?

BEWERKEN

Probeer dit

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 is een voorbeeld

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

Is het mooi? nee, helemaal niet, werkt het.... Ja.

Ik zal proberen een filterbestand te maken en misschien een klein bash-programma of zoiets als ik tijd heb om deze hete puinhoop uit te voeren.

BEWERKEN

Hier is wat herziene code, ziet er mooier uit (soort)

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


  1. Een MySQL-query sorteren met ORDER BY of met PHP-sorteerfuncties

  2. MySQL-groepering van resultaten per tijdsperiode

  3. Recordvolgorde bijhouden/bijwerken in mysql

  4. Hoe de AUTO_INCREMENT-kolom opnieuw toe te wijzen voor elke rij in een MySQL-tabel met behulp van PHP