46 votes

PDO PHP vs mysql_connect normal

Devrais-je utiliser php PDO ou mysql_connect normal pour exécuter des requêtes de base de données en PHP?

Lequel est le plus rapide?

L'un des principaux avantages de PDO est que l'interface est cohérente sur plusieurs bases de données. Il existe également des fonctions intéressantes pour les instructions préparées, qui évitent d’échapper à toutes vos chaînes de requête. La portabilité de PDO est supérieure à mysql_connect.

Donc, devrais-je utiliser PDO pour ces raisons ou rester fidèle à mysql_connect?

40voto

Sadi Points 926

PDO est un peu plus lent que le mysql_ * Mais sa portabilité est excellente. PDO fournit une interface unique sur plusieurs bases de données. Cela signifie que vous pouvez utiliser plusieurs bases de données sans utiliser mysql_query pour mysql, mssql_query pour MS sql, etc. Utilisez simplement quelque chose comme $ db-> query ("INSERT INTO ...") toujours. Peu importe le pilote de base de données que vous utilisez.

Donc, pour les projets plus grands ou portables, PDO est préférable. Même le framework zend utilise PDO.

17voto

gnud Points 26854

Certains rapide timings indiquer AOP est légèrement plus rapide lors de la connexion.

$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";

Donne des résultats comme

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

La différence de vitesse sera négligeable de toute façon; l'établissement d'une connexion réseau est susceptibles de prendre BEAUCOUP plus longtemps que tous les frais généraux encourus par PDO, surtout si le serveur mysql est sur un autre hôte.

Vous avez mentionné toutes les raisons d'utiliser PDO vous-même. Vraiment, jamais, jamais utiliser mysql_* fonctions directement, soit utiliser PDO, ou l'utilisation de certains autres de la bibliothèque.

11voto

Pascal MARTIN Points 195780

Je ne pense pas que la vitesse est ce que les gens recherchent quand ils sont en utilisant PDO -- je ne sais pas si il y a une différence, et je honnestly ne se soucient pas : tant que je suis en train de faire un couple de requêtes à une base de données lors de la génération d'une page, quelques millisecondes sur le PHP côté ne changera rien.

Il y a deux/trois grandes choses avec PDO, comparé à d' mysql_* :

  • Plus ou moins constante de l'interface à travers des bases de données ; mieux que d'utiliser mysql_*, pg_*, oci_*, ...
  • Une API Orientée objet (mysqli_* a un OO-API, mais pas mysql_*)
  • Support de nouvelles fonctionnalités de MySQL >= 4.1 (même en tant que mysqli_*, mais pas mysql_*, encore une fois)

BTW : je suis généralement à l'aide de PDO, soit "à la main", ou comme il est intégré dans / utilisé par le Framework Zend et/ou de la Doctrine.


Au passage : Même si vous n'allez pas utiliser PDO, notez que l'utilisation de mysqli au lieu de mysql est recommandé.

Voir cette page du manuel PHP, à ce sujet.

6voto

orrd Points 347

J'ai fait quelques tests de performance pour comparer les fonctions Mysqli à PDO fonctions à l'aide de deux déclarations préparées à l'avance et régulière de requêtes directes (testé à l'aide de select sur Mysqlnd et les tables MyISAM).

J'ai trouvé que PDO requêtes sont juste un peu plus lent que Mysqli, mais seulement légèrement. C'est logique, puisque AOP utilisé à cette fin la plupart du temps juste un wrapper qui appelle les fonctions Mysqli. L'avantage de l'utilisation de PDO, c'est qu'il rend un peu plus facile de migrer vers une autre base de données parce que les noms de fonctions ne sont pas spécifiques à MySQL.

La vraie différence est dans le fait que vous utilisez les requêtes préparées. Il y a une grande et significative de la performance peine d'utiliser les requêtes préparées. D'autres personnes qui l'ont testé ont trouvé les mêmes résultats.

Le seul moment où les requêtes préparées sont plus rapide si vous êtes à la préparation d'une requête une fois, puis en soumettant des milliers de fois avec différentes valeurs de données. Sinon, c'est toujours plus rapide d'utiliser mysqli::query() ou PDO::query(). Mais il est important d'être conscient que ces fonctions n'échappent pas à des valeurs de données pour vous, si vous avez besoin de se rappeler d'utiliser mysqli::real_ escape_ chaîne de caractères() ou PDO::quote() sur les variables de données.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X