Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Format kode MySQL di dalam string PHP

Cara terbaik untuk melakukan ini menurut saya adalah dengan menggunakan Ekspresi Reguler atau SED/AWK untuk memformat semuanya, ini memberi kita bonus peta pengganti dengan cepat. Kemungkinan Anda memiliki kesalahan kode tinggi, jadi agak sulit.

biarkan saya mengerjakannya sedikit dan saya dapat melihat apakah saya dapat menemukan solusi yang baik. Apakah dijamin bahwa Anda merangkum semua tanda kutip ganda SQL?

EDIT

Coba ini

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

Ini contohnya

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

Apakah itu cantik? tidak, tidak sama sekali, apakah itu berhasil.... Ya.

Saya akan mencoba membuat file filter dan mungkin sedikit program bash atau semacamnya saat saya punya waktu untuk menjalankan kekacauan panas ini.

EDIT

Berikut beberapa kode yang direvisi, terlihat lebih cantik (agak)

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL Query - Catatan antara Hari Ini dan 30 Hari Terakhir

  2. Apakah Anda hanya memperbarui bidang yang diubah atau semua bidang?

  3. temukan transaksi berurutan dalam 10 menit

  4. Cara Mereplikasi Database MySQL ke Server Lain

  5. Nilai bidang yang dihitung berdasarkan kolom lain saat penyisipan