Оба они подготовили заявления. pg_ * - это оболочка для libpq. Правильно?PDO vs pg_ * функции
Мне нравится PDO в PHP, но я не буду менять базу данных в будущем. Какую библиотеку я должен использовать? Какой-нибудь бенчмарк? версия PHP: 5,4
Оба они подготовили заявления. pg_ * - это оболочка для libpq. Правильно?PDO vs pg_ * функции
Мне нравится PDO в PHP, но я не буду менять базу данных в будущем. Какую библиотеку я должен использовать? Какой-нибудь бенчмарк? версия PHP: 5,4
IMHO, используя функции, что подходы, непосредственно бетонную DB (как pg_
, oci_
, mysql[i]_
и т.д.) всегда немного быстрее затем с помощью PDO или любой СУБД слой (Учение, Dibi и т.д.) ,
Но использование PDO или любого уровня СУБД в архитектуре ООП должно быть лучше подходить (ИМХО, опять же), поскольку вы научитесь использовать этот слой и, следовательно, будете использовать его на любом БД-движке. Конечно, если вы измените механизм БД в приложении, вам не нужно беспокоиться о переписывании всего приложения.
Даже если вы не планируете менять механизм БД, я бы рекомендовал использовать PDO. Но это только мое мнение :-)
Я думаю, что это скорее вопрос вкуса. PDO
может быть быстрее, поскольку он скомпилирован, или это может быть не так, поскольку он действует как обертка. Я уверен, что разница в скорости будет достаточно мала, чтобы не повлиять на ваше решение.
Это чистая спекуляция, но PDO
новый и, кажется, стандарт для подключения БД сейчас, поэтому его поддержка с точки зрения кода, вероятно, расти, в то время как поддержка mysql_*
и, вероятно, pg_*
будет продолжать ослабевать.
Главным преимуществом PDO
является то, что его абстракция позволит вам перейти на другую БД позже, но я уверен, вы не будете, так что, вероятно, также не должно повлиять на ваше решение.
Я лично предпочитаю работать с PDO
. Легче передавать и управлять объектами, чем переменные «ресурс».
Взрыв, вы уверены? Я новичок в PHP и Postgre, и теперь мне нужно решить, какую технологию я буду использовать, я запускал некоторые тесты, а pg_connect, похоже, быстрее, чем PDO. – HMarioD
PDO предлагает приятный интерфейс, но более универсальность также означает больше проблем для решения тонких особенностей каждого бэкэнда. Если вы посмотрите на the bugtracker, у него есть ряд открытых проблем, и некоторые из них серьезны.
Вот еще одно доказательство с postgresql: У парсера PDO возникают проблемы с установкой стандартного_конформного_строка в положение 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"));
Выполнить() неожиданно терпит неудачу в PDO слое с Database error: SQLSTATE[HY093]: Invalid parameter number: :foo
. Кажется, что он не может идентифицировать: foo как параметр.
Если запрос прекращается после 'ab\'=:foo
, без другого условия, то он отлично работает. Или, если другое условие не содержит строку, оно отлично работает.
Проблема похожа на issue #55335, что отклонено как Не ошибка, совершенно неверно, на мой взгляд. [На самом деле, я даже взломал PDO самостоятельно, чтобы исправить это, но таким образом, что это несовместимо с другими бэкэндами, поэтому никакого патча. Я был смущен тем, что лексический анализатор запросов был таким общим.]
С другой стороны, если pg_ * находится ближе к libpq, такая проблема, скорее всего, произойдет в первую очередь, и ее легче решить, если это произойдет.
Так что я бы сказал, что не все хорошо с PDO. Внутренне это, конечно, более сложно, чем pg_ *, и больше сложностей означает больше ошибок. Рассматриваются ли эти ошибки? Основываясь на некоторых записях ошибок, необязательно.
+1 Отличная почта. Сделал вашу точку зрения очень ясной, обоснованной с соответствующими доказательствами. Оставаться ближе к СУБД быстрее и чище. –
@MorrisonHotel Простите меня? – shadyyx
Мой комментарий плохой, а не вы :) – MorrisonHotel
PostgreSQL: ** SELECT TO_STRING (...) FROM mytable LIMIT 1 OFFSET 1 ** MySQL: ** SELECT DATE_FORMAT (...) FROM mytable LIMIT 1,1 ** Как мы видим, даже используя PDO, мне придется переписать все запросы в базу данных. Итак, PDO не является панацеей. Мне придется использовать Doctrine, Propel и т. Д. (Исключается). – MorrisonHotel