PHP PDO против обычного mysql_connect

Должен ли я использовать php PDO или обычный mysql_connect для выполнения запросов к базе данных в PHP?

Какой из них быстрее?

Одним из больших преимуществ PDO является то, что интерфейс согласован между несколькими базами данных. Для подготовленных операторов есть и некоторые интересные функции, из-за которых вы избегаете экранирования всех строк запроса. Переносимость PDO больше, чем mysql_connect.

Итак, следует ли использовать PDO по этим причинам или придерживаться традиционного mysql_connect?

Related of "PHP PDO против обычного mysql_connect"

PDO немного медленнее, чем mysql_ * Но он обладает большой переносимостью. PDO обеспечивает единый интерфейс для нескольких баз данных. Это означает, что вы можете использовать несколько БД без использования mysql_query для mysql, mssql_query для MS sql и т. Д. Просто используйте что-то вроде $ db-> query («INSERT INTO …») всегда. Независимо от того, какой драйвер DB вы используете.

Таким образом, для более крупного или портативного проекта PDO предпочтительнее. Даже каркас zend использует PDO.

Некоторые быстрые тайминги показывают, что PDO немного быстрее при подключении.

 $start = microtime(true); for($i=0; $i<10000; ++$i) { try { $db = new PDO($dsn, $user, $password); } catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage()."\n"; } $db = null; } $pdotime = microtime(true) - $start; echo "PDO time: ".$pdotime."\n"; $start = microtime(true); for($i=0; $i<10000; ++$i) { $db = mysql_connect($host, $user, $password); if(!$db) { echo "Connection failed\n"; } if(!mysql_select_db($schema, $db)) { echo "Error: ".mysql_error()."\n"; } mysql_close($db); } $rawtime = microtime(true) - $start; echo "Raw time: ".$rawtime."\n"; 

Дает результаты, подобные

 PDO time: 0.77983117103577 Raw time: 0.8918719291687 PDO time: 0.7866849899292 Raw time: 0.8954758644104 PDO time: 0.77420806884766 Raw time: 0.90708494186401 PDO time: 0.77484893798828 Raw time: 0.90069103240967 

В любом случае разность скоростей будет незначительной; установление сетевого соединения, скорее всего, займет LOT дольше, чем любые накладные расходы, вызванные PDO, особенно если сервер mysql находится на другом хосте.

Вы упомянули все причины использования PDO самостоятельно. Действительно, никогда не используйте функции mysql_ * напрямую, используйте PDO или используйте какую-либо другую библиотеку .

Я не думаю, что скорость – это то, что люди ищут, когда используют PDO – я не знаю, есть ли разница, и мне очень интересно: до тех пор, пока я делаю пару запросов к база данных при создании страницы, пара миллисекунд на стороне PHP ничего не изменит.

Есть две / три отличные вещи с PDO, по сравнению с mysql_* :

  • Более или менее постоянный интерфейс через базы данных; лучше, чем использование mysql_* , pg_* , oci_* , …
  • Объектно-ориентированный API ( mysqli_* имеет OO-API, но не mysql_* )
  • Поддержка новых функций MySQL> = 4.1 (так же, как mysqli_* , но не mysql_* , снова)

BTW: Обычно я использую PDO – либо «вручную», либо как он интегрирован / используется Zend Framework и / или Doctrine .

В качестве побочного элемента: даже если вы не собираетесь использовать PDO, обратите внимание, что рекомендуется использовать mysqli вместо mysql.

См. Эту страницу руководства по PHP , об этом.

  • С помощью PDO вы можете использовать привязанные параметры, и это предотвратит большинство атак на SQL.
  • Вы можете увеличить скорость с помощью подготовленных инструкций PDO.
  • стандартный интерфейс ко всем db-серверам
  • Существует множество полезных методов (например, семейство fetch *),

Я провел некоторое тестирование производительности, чтобы сравнить функции Mysqli с функциями PDO, используя как подготовленные операторы, так и регулярные прямые запросы (проверенные с помощью операторов select в таблицах Mysqlnd и MyISAM).

Я обнаружил, что запросы PDO немного медленнее, чем Mysqli, но только незначительно. Это имеет смысл, поскольку PDO используется для этой цели в основном просто оболочка, которая вызывает функции Mysqli. Преимущество использования PDO заключается в том, что он немного упрощает переход к другой базе данных, поскольку имена функций не относятся к MySQL.

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

Запросы, подготовленные только по времени, быстрее, если вы готовите запрос один раз, а затем отправляете его тысячи раз с разными значениями данных. В противном случае всегда можно использовать mysqli :: query () или PDO :: query (). Но важно помнить, что эти функции не избегают значений данных для вас, поэтому вам нужно не забывать использовать mysqli :: real_ escape_ string () или PDO :: quote () для переменных данных.

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

В обоих случаях вы вызываете тот же mySQL-сервер с одного и того же Php-сервера … поэтому вы не можете заметить большую разницу.

Если вам нужна хорошая производительность, подумайте о кеше (memcache или простой файл Php …) и создайте хорошую структуру базы данных (INDEX …)

  • PDO лучше, чем SQl
  • PDO и его заявление о готовности обеспечивают лучший защищенный код для SQL-инъекций
  • PDO – объектно-ориентированный;)
  • PDO совместим с некоторыми механизмами баз данных, как описано ранее
  • MySQLl_ * Устарел и скоро будет удален
  • PDO обеспечивает большую функциональность с меньшим количеством кодов Пример:

    PDO

    1. соединять
    2. Проверьте «<» и «>» и «#» (эта проверка для глобальных целей)
    3. Подготовить
    4. казнить
    5. Закрыть

mysql_ *

  1. соединять
  2. Добавить обратную косую черту
  3. Xsafe
  4. Проверьте «<» и «>» и «#» (эта проверка для глобальных целей)
  5. запрос
  6. Закрыть

как те же функции, но вы сравниваете для кодов PDO более человечно читаемым 🙂 Итак, что вы думаете?

Если производительность не является «реальной проблемой» для вас, вы должны использовать PDO. Производительность отличается небольшими полями, а PDO имеет очень красивый и переносимый интерфейс между базами данных, который может сэкономить вам некоторые головные боли, если вам нужно использовать несколько драйверов баз данных.

Функция mysql_connect устарела с PHP 5.5.0 и, как и большинство устаревших функций, будет удалена. Поэтому предпочитайте использовать PDO_MySQL (или другую альтернативу MySQLi ) через mysql_connect .

Источник: http://php.net/manual/en/function.mysql-connect.php

Некоторые преимущества PDO:

  1. Можно получить доступ к нескольким базам данных.
  2. Предоставлялось много драйверов базы данных для подключения к различным различным базам данных.
  3. При переходе из одной базы данных в другую базу данных вам не нужно писать весь код для подключения к новой базе данных, просто измените строку подключения и некоторый запрос, который требуется для новой базы данных.
  4. Он предоставляет инструкцию подготовки, которая является своего рода шаблоном запроса, который скомпилирован только один раз и может выполняться столько раз, сколько вы хотите, просто изменив атрибуты, которые называются place-holder.
  5. Простота и эффективность. Общие операции: Вставка, обновление … и т. Д.

Код подключения базы данных PDO:

 <?php $dbhost = 'localhost'; $dbname = 'clsrepair'; $dbuser = 'root'; $dbpass = ''; try { $db = new PDO("mysql:host={$dbhost};dbname={$dbname}",$dbuser,$dbpass); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $e) { echo "Connection error: ".$e->getMessage(); } ?> 

Нормальный код подключения к базе данных MySQL:

 <?php mysql_connect("localhost","root", ""); mysql_select_db ("clsrepair"); ?> 

или

  <?php $dbHost = 'localhost'; // usually localhost $dbUsername = 'root'; $dbPassword = ''; $dbDatabase = 'clsrepair'; $db = mysql_connect($dbHost, $dbUsername, $dbPassword) or die ("Unable to connect to Database Server."); mysql_select_db ($dbDatabase, $db) or die ("Could not select database."); ?> 

MySQL код подключения к базе данных легко, но PDO имеет много преимуществ.