sql >> Databasteknik >  >> RDS >> Mysql

Formatera MySQL-kod inuti PHP-strängen

Det bästa sättet att göra detta enligt mig är att använda Regular Expressions eller SED/AWK för att formatera allt, det ger oss bonusen med ersättningskartor i farten. Chansen att du kan ha kodfel är dock stor, så det är lite svårt.

låt mig jobba på det lite så kan jag se om jag kan komma på en bra lösning. Är det garanterat att du kapslar in alla SQL-citattecken?

REDIGERA

Prova detta

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

Här är ett exempel

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

Är det snyggt? nej, inte alls, funkar det... Japp.

Jag ska försöka skapa en filterfil och kanske ett litet bash-program eller något när jag får tid att köra den här heta röran.

REDIGERA

Här är lite reviderad kod som ser snyggare ut (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";


  1. Vad gör ::i PostgreSQL?

  2. CASE kontra DECODE

  3. Hur man byter namn på tabell i MySQL

  4. Genererar postgresql användarlösenord