2012-04-30 3 views
7

Оба они подготовили заявления. pg_ * - это оболочка для libpq. Правильно?PDO vs pg_ * функции

Мне нравится PDO в PHP, но я не буду менять базу данных в будущем. Какую библиотеку я должен использовать? Какой-нибудь бенчмарк? версия PHP: 5,4

ответ

4

IMHO, используя функции, что подходы, непосредственно бетонную DB (как pg_, oci_, mysql[i]_ и т.д.) всегда немного быстрее затем с помощью PDO или любой СУБД слой (Учение, Dibi и т.д.) ,

Но использование PDO или любого уровня СУБД в архитектуре ООП должно быть лучше подходить (ИМХО, опять же), поскольку вы научитесь использовать этот слой и, следовательно, будете использовать его на любом БД-движке. Конечно, если вы измените механизм БД в приложении, вам не нужно беспокоиться о переписывании всего приложения.

Даже если вы не планируете менять механизм БД, я бы рекомендовал использовать PDO. Но это только мое мнение :-)

+0

@MorrisonHotel Простите меня? – shadyyx

+0

Мой комментарий плохой, а не вы :) – MorrisonHotel

+0

PostgreSQL: ** SELECT TO_STRING (...) FROM mytable LIMIT 1 OFFSET 1 ** MySQL: ** SELECT DATE_FORMAT (...) FROM mytable LIMIT 1,1 ** Как мы видим, даже используя PDO, мне придется переписать все запросы в базу данных. Итак, PDO не является панацеей. Мне придется использовать Doctrine, Propel и т. Д. (Исключается). – MorrisonHotel

1

Я думаю, что это скорее вопрос вкуса. PDO может быть быстрее, поскольку он скомпилирован, или это может быть не так, поскольку он действует как обертка. Я уверен, что разница в скорости будет достаточно мала, чтобы не повлиять на ваше решение.

Это чистая спекуляция, но PDO новый и, кажется, стандарт для подключения БД сейчас, поэтому его поддержка с точки зрения кода, вероятно, расти, в то время как поддержка mysql_* и, вероятно, pg_* будет продолжать ослабевать.

Главным преимуществом PDO является то, что его абстракция позволит вам перейти на другую БД позже, но я уверен, вы не будете, так что, вероятно, также не должно повлиять на ваше решение.

Я лично предпочитаю работать с PDO. Легче передавать и управлять объектами, чем переменные «ресурс».

+0

Взрыв, вы уверены? Я новичок в PHP и Postgre, и теперь мне нужно решить, какую технологию я буду использовать, я запускал некоторые тесты, а pg_connect, похоже, быстрее, чем PDO. – HMarioD

9

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

+1 Отличная почта. Сделал вашу точку зрения очень ясной, обоснованной с соответствующими доказательствами. Оставаться ближе к СУБД быстрее и чище. –

Смежные вопросы