Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Obsługa złożonych klauzul WHERE za pomocą konstruktora zapytań PHP

Trochę pracowałem nad Zend_Db biblioteka, która zawiera klasę PHP do konstruowania zapytań SQL . Postanowiłem spróbować obsłużyć każdą możliwą do wyobrażenia składnię SQL w WHERE i HAVING klauzul, z kilku powodów:

  • PHP to język skryptowy, który analizuje i kompiluje kod na każde żądanie (chyba że używasz pamięci podręcznej kodu bajtowego). Tak więc środowisko PHP jest wrażliwe na obszerne biblioteki kodu - bardziej niż Java, C#, Python czy cokolwiek innego. Dlatego priorytetem jest, aby biblioteki były jak najszczuplejsze.

    Wszystkie Zend_Db biblioteka nad którą pracowałem to około 2000 linii kodu PHP. Natomiast Java Hibernate jest rzędu 118 tys. linijek kodu. Ale to nie jest duży problem, ponieważ biblioteka Java jest prekompilowana i nie musi być ładowana przy każdym żądaniu.

  • Wyrażenia SQL stosują gramatykę generatywną, która jest bardziej zwarta i łatwiejsza do odczytania i utrzymania niż jakakolwiek pokazana konstrukcja oparta na PHP. Nauka gramatyki wyrażeń SQL jest znacznie prostsza niż nauka interfejsu API, który może ją symulować. W końcu popierasz „uproszczoną gramatykę”. Albo zaczynasz w ten sposób i zostajesz zmuszony przez społeczność użytkowników do pełzanie funkcji dopóki Twój interfejs API nie będzie bezużytecznie złożony.

  • Aby debugować aplikację korzystającą z takiego interfejsu API, nieuchronnie potrzebujesz dostępu do końcowego wyrażenia SQL, więc chodzi o najszczelna abstrakcja możesz mieć.

  • Jedyną zaletą korzystania z interfejsu opartego na PHP dla wyrażeń SQL jest to, że wspomaga on uzupełnianie kodu w inteligentnych edytorach i środowiskach IDE. Ale kiedy tak wiele operatorów i operandów używa stałych łańcuchowych, takich jak '>=' , psujesz wszelką inteligencję dotyczącą uzupełniania kodu.

aktualizacja: Właśnie przeczytałem dobry artykuł na blogu „Pożegnanie z ORM-ami Pisarz, Aldo Cortesi, sugeruje używanie języka wyrażeń SQL w SQLAlchemy Pythona. Cukier składniowy i przeciążanie operatorów, które są standardem w Pythonie (ale nieobsługiwane w PHP) sprawiają, że jest to bardzo skuteczne rozwiązanie do generowania zapytań.

Możesz również spojrzeć na klasę DBIx::Class Perla, ale okazuje się, że jest dość brzydka.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tworzenie zestawu MySQL SET z ciągu znaków

  2. Automatyczne odświeżanie Androida po wstawieniu nowych danych do widoku listy

  3. Darmowy hosting z obsługą PHP

  4. Pobieranie Mysql2::Error (błąd połączenia SSL:ASN:złe potwierdzenie innego podpisu) w aplikacji Heroku z AWS RDS

  5. Jak wyeksportować i zaimportować istniejącego użytkownika (z jego uprawnieniami!)