Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Định dạng mã MySQL bên trong chuỗi PHP

Cách tốt nhất để làm điều này theo ý kiến ​​của tôi là sử dụng Biểu thức chính quy hoặc SED / AWK để định dạng mọi thứ, nó mang lại cho chúng tôi phần thưởng là các bản đồ thay thế nhanh chóng. Tuy nhiên, khả năng bạn có thể gặp lỗi mã là rất cao, vì vậy nó khá khó khăn.

hãy để tôi làm việc với nó một chút và tôi có thể xem liệu tôi có thể đưa ra một giải pháp hàng hóa hay không. Có đảm bảo rằng bạn đang đóng gói tất cả các dấu ngoặc kép trong SQL không?

CHỈNH SỬA

Hãy thử điều này

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

Đây là một ví dụ

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

Nó có đẹp không? không, không hề, nó có hoạt động không .... Yeup.

Tôi sẽ thử tạo một tệp bộ lọc và có thể là một chương trình bash nhỏ hoặc một cái gì đó khi tôi có thời gian để chạy mớ hỗn độn nóng bỏng này.

CHỈNH SỬA

Đây là một số mã đã sửa đổi, trông đẹp hơn (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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để nhóm theo tháng và trả về 0 nếu không có giá trị cho tháng nhất định?

  2. Làm cách nào để lấy kích thước của các bảng trong cơ sở dữ liệu MySQL?

  3. APPARENT DEADLOCK Tạo chuỗi khẩn cấp cho các nhiệm vụ đang chờ xử lý chưa được giao

  4. Tạo truy vấn để biết số lượng cuộc gọi chưa hoàn thành

  5. Chèn vào bảng theo thứ tự