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

PDO срещу pg_* функции

PDO предлага приятен интерфейс, но повече универсалност означава и повече проблеми при справянето с фините идиосинкразии на всеки бекенд. Ако погледнете програмата за проследяване на грешки, тя има редица отворени проблеми и някои от тях са сериозни.

Ето едно анекдотично доказателство с postgresql:Парсерът на PDO има проблеми със standard_conforming_strings, зададени на ON (което сега е по подразбиране, от PG-9.1). Тестов случай с php-5.3.9:

$dbh->exec("SET standard_conforming_strings=on");
$p=$dbh->prepare("SELECT 1 WHERE 'ab\' = :foo AND 'cd' = :bar");
$p->execute(array(":foo" => "ab", ":bar" => "cd"));

execute() неочаквано се проваля на PDO слоя сDatabase error: SQLSTATE[HY093]: Invalid parameter number: :foo . Изглежда, че не е в състояние да идентифицира :foo като параметър.

Ако заявката спре след 'ab\'=:foo , без друго условие, тогава работи добре. Или ако другото условие не включва низ, то също работи добре.

Проблемът изглежда подобен на проблем #55335 , който беше отхвърлен като Не е грешка , доста погрешно според мен.[Всъщност, аз дори сам хакнах PDO, за да го поправя, но по начин, който е несъвместим с други бекендове, така че няма корекция. Бях смутен от това, че лексикалния анализатор на заявките е толкова общ.]

От друга страна, тъй като pg_* е по-близо до libpq, този вид проблем е по-малко вероятно да се случи на първо място и по-лесно се решава, ако се случи.

Така че моята гледна точка би била, че не всичко е хубаво със ЗНП. Вътрешно това със сигурност е по-предизвикателно от pg_*, а по-голямата сложност означава повече грешки. Отстранени ли са тези грешки? Въз основа на определени записи в програмата за проследяване на грешки, не е задължително.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да изчислим разликата между две времеви марки в PostgreSQL

  2. Не може да се дешифрира с помощта на pgcrypto от AES-256-CBC, но AES-128-CBC е наред

  3. Как да увеличите максималния брой връзки в PostgreSQL

  4. PostgreSQL колоната не съществува, но всъщност съществува

  5. Сравнителен анализ, управлявани PostgreSQL облачни решения – Google Cloud:Част трета