Вопрос

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

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

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

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

Это было полезно?

Решение

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

Итак, для более крупного или портативного проекта PDO предпочтительнее. Даже в Zend Framework используют 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

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

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

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

Есть две-три замечательные особенности PDO по сравнению с mysql_* :

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

КСТАТИ :Обычно я использую PDO - либо «вручную», либо так, как он интегрирован/используется Zend-фреймворк и/или Доктрина.


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

Видеть эта страница руководства PHP, об этом.

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

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

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

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

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

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

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

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

  • PDO лучше, чем SQl
  • PDO и его оператор подготовки обеспечивают лучший защищенный код от SQL-инъекций
  • PDO объектно-ориентирован;)
  • PDO совместим с некоторыми компонентами Database Engine, как объяснялось ранее.
  • MySQLl_* устарел и скоро будет удален.
  • 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 ) через <=>.

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

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

<Ол>
  • Доступ к нескольким базам данных.
  • Предоставлено много драйверов баз данных для соединения с разными базами данных.
  • Когда вы переключаетесь с одной базы данных на другую, вам не нужно писать весь код для соединения с новой базой данных, просто измените строку подключения и некоторые запросы, необходимые для новой базы данных.
  • Он предоставляет оператор prepare, который является своего рода шаблоном запроса, который компилируется только один раз и может быть выполнен столько раз, сколько вы хотите, просто изменив атрибуты, которые называются заполнителями.
  • Простая и эффективная общая операция, такая как вставка, обновление и т. д.
  • Код подключения к базе данных 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 имеет много преимуществ.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top