Mysql
 sql >> база данни >  >> RDS >> Mysql

Обработка на сложни клаузи WHERE с PHP Query Builder

Работих доста по Zend_Db библиотека, която включва PHP клас за конструиране на SQL заявки . Реших да се опитам да се справя с всеки възможен SQL синтаксис в WHERE и HAVING клаузи по няколко причини:

  • PHP е скриптов език, който анализира и компилира код при всяка заявка (освен ако не използвате кеш на байткод). Така че PHP средата е чувствителна към обемисти кодови библиотеки - повече от Java или C# или Python или каквото имате. Ето защо е висок приоритет да поддържаме библиотеките възможно най-леки.

    Всички Zend_Db библиотеката, върху която работих, беше около 2000 реда PHP код. За разлика от тях, Java Hibernate е от порядъка на 118K реда код. Но това не е толкова голям проблем, тъй като библиотеката на Java е предварително компилирана и не е необходимо да се зарежда при всяка заявка.

  • SQL изразите следват генеративна граматика, която е по-компактна и по-лесна за четене и поддържане от която и да е от PHP-базираната конструкция, която показахте. Изучаването на граматиката на SQL израза е много по-лесно от изучаването на API, който може да го симулира. В крайна сметка поддържате „опростена граматика“. В противен случай започвате по този начин и се оказвате принудени от вашата потребителска общност в Feature Creep докато вашият API не стане неизползваемо сложен.

  • За да отстраните грешки в приложение, което използва такъв API, неизбежно ще ви е необходим достъп до крайния SQL израз, така че става дума за най-пропусклива абстракция можете да имате.

  • Единственото предимство при използването на PHP-базиран интерфейс за SQL изрази би било, че подпомага завършването на кода в интелигентни редактори и IDE. Но когато толкова много от операторите и операндите използват низови константи като '>=' , вие разваляте всякаква информация за попълване на код.

актуализация: Току-що прочетох една добра статия в блога „Сбогом на ORMs ." Писателят, Алдо Кортези, предлага да се използва SQL Expression Language в SQLAlchemy на Python. Синтактичната захар и претоварването на оператори, които са стандартни в Python (но не се поддържат в PHP), правят това много ефективно решение за генериране на заявки.

Може да погледнете и DBIx::Class на Perl, но в крайна сметка той е доста грозен.



  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 `FORCE INDEX`?

  2. Вмъкнете данни в MySql DB и покажете дали вмъкването е успешно или неуспешно

  3. импортиране на CSV в phpmyadmin

  4. Внедряване на хаштагове като twitter и facebook

  5. Показване на таблици в SQLite база данни в Python