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

Xử lý các mệnh đề WHERE phức tạp với Trình tạo truy vấn PHP

Tôi đã làm việc khá nhiều trên Zend_Db thư viện, bao gồm một PHP lớp để tạo truy vấn SQL . Tôi quyết định cố gắng xử lý mọi cú pháp SQL có thể tưởng tượng được trong WHEREHAVING các mệnh đề, vì một số lý do:

  • PHP là một ngôn ngữ kịch bản phân tích cú pháp và biên dịch mã theo mọi yêu cầu (trừ khi bạn sử dụng bộ đệm bytecode). Vì vậy, môi trường PHP nhạy cảm với các thư viện mã cồng kềnh - hơn cả Java hoặc C # hoặc Python hoặc những gì có bạn. Do đó, ưu tiên hàng đầu là giữ cho các thư viện tinh gọn nhất có thể.

    Tất cả Zend_Db thư viện tôi đã làm việc có khoảng 2.000 dòng mã PHP. Ngược lại, Java Hibernate theo thứ tự 118K dòng mã. Nhưng đó không phải là vấn đề quá lớn vì thư viện Java được biên dịch trước và không phải tải theo mọi yêu cầu.

  • Các biểu thức SQL tuân theo một ngữ pháp chung nhỏ gọn hơn, dễ đọc và dễ duy trì hơn bất kỳ cấu trúc dựa trên PHP nào mà bạn đã trình bày. Học ngữ pháp biểu thức SQL dễ hơn nhiều so với học một API có thể mô phỏng nó. Bạn sẽ ủng hộ một "ngữ pháp đơn giản hóa". Hoặc nếu không, bạn bắt đầu theo cách đó và thấy mình bị cộng đồng người dùng ép buộc vào Tính năng Creep cho đến khi API của bạn phức tạp đến mức không thể sử dụng được.

  • Để gỡ lỗi một ứng dụng đã sử dụng API như vậy, chắc chắn bạn sẽ cần quyền truy cập vào biểu thức SQL cuối cùng, vì vậy, đó là về trừu tượng tốt nhất bạn có thể có.

  • Ưu điểm duy nhất của việc sử dụng giao diện dựa trên PHP cho các biểu thức SQL là nó hỗ trợ hoàn thành mã trong các trình soạn thảo thông minh và IDE. Nhưng khi rất nhiều toán tử và toán hạng sử dụng hằng số chuỗi như '>=' , bạn làm hỏng mọi thông tin hoàn thành mã.

cập nhật: Tôi vừa đọc một bài viết hay trên blog " Lời tạm biệt với ORM . "Người viết, Aldo Cortesi, đề xuất sử dụng Ngôn ngữ biểu thức SQL trong SQLAlchemy của Python. Đường cú pháp và nạp chồng toán tử là tiêu chuẩn trong Python (nhưng không được hỗ trợ trong PHP) làm cho đây trở thành một giải pháp tạo truy vấn rất hiệu quả.

Bạn cũng có thể nhìn vào DBIx ::Class của Perl, nhưng cuối cùng nó khá xấu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách đặt lại mật khẩu gốc MySQL

  2. Kết nối với DB từ một Tiện ích mở rộng của Chrome?

  3. LOAD_FILE trả về NULL

  4. Sử dụng tham số giới hạn nhiều lần

  5. Cách bật SSL / TLS cho MySQL trong Ubuntu