Question

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

Lequel est le plus rapide?

L'un des gros 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.

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

Était-ce utile?

La solution

PDO est un peu plus lent que le mysql_ * Mais il a une grande portabilité. 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 - & Gt; query (& "INSERT INTO ... &";) Toujours . Quel que soit le pilote de base de données que vous utilisez.

Donc, pour un projet plus grand ou portable, PDO est préférable. Même zend framework utilise PDO.

Autres conseils

Certains timings rapides indiquent que PDO est légèrement plus rapide à 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 tels que

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 de toute façon négligeable. établir une connexion réseau prendra probablement BEAUCOUP plus longtemps que tout le temps système engendré par le PDO, en particulier si le serveur mysql est sur un autre hôte.

Vous avez évoqué vous-même toutes les raisons d'utiliser PDO. En réalité, n'utilisez jamais les fonctions mysql_ * directement, utilisez PDO ou certains autre bibliothèque .

Je ne pense pas que la vitesse soit ce que les gens recherchent lorsqu'ils utilisent AOP - je ne sais pas s'il existe une différence, et honnêtement, je m'en fiche: tant que je fais un couple des requêtes à une base de données lors de la génération d'une page, quelques millisecondes du côté de PHP ne changeront rien.

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

  • Interface plus ou moins constante entre les bases de données; mieux que d'utiliser pg_*, oci_*, mysqli_*, ...
  • L'API ( <=> a une API OO, mais pas <=> )
  • Prise en charge des nouvelles fonctionnalités de MySQL > = 4.1 (identique à <=>, mais pas à <=>, à nouveau)

BTW: J'utilise généralement PDO - soit & "à la main &"; soit comme intégré à / utilisé par Zend Framework et / ou Doctrine .


Sidenote: Même si vous n’utilisez pas PDO, notez qu’il est recommandé d’utiliser mysqli au lieu de mysql.

Voir cette page du manuel PHP , à ce sujet.

  • Avec PDO, vous pouvez utiliser des paramètres liés qui empêcheront la plupart des attaques par injection SQL.
  • Vous pouvez gagner en rapidité en utilisant les instructions préparées par PDO.
  • interface standard avec tous les serveurs de base de données
  • Il existe de nombreuses méthodes utiles (comme la famille fetch *)

J'ai effectué des tests de performances pour comparer les fonctions Mysqli aux fonctions PDO à l'aide d'instructions préparées et de requêtes directes standard (testées à l'aide d'instructions select sur les tables Mysqlnd et MyISAM).

J'ai constaté que les requêtes PDO sont légèrement plus lentes que Mysqli, mais seulement légèrement. Cela est logique puisque PDO utilisé à cette fin est principalement un wrapper qui appelle des fonctions Mysqli. L’utilisation de PDO présente l’avantage de faciliter la migration vers une autre base de données, car les noms de fonction ne sont pas spécifiques à MySQL.

La réelle différence de performances réside dans le fait que vous utilisiez des requêtes préparées. Il existe une pénalité de performance importante et significative à l’utilisation de requêtes préparées. D'autres personnes qui les ont testées ont trouvé les mêmes résultats.

Les requêtes préparées plus rapidement sont les plus rapides si vous la préparez une fois puis que vous la soumettez des milliers de fois avec des valeurs de données différentes. Sinon, il est toujours plus rapide d'utiliser mysqli :: query () ou PDO :: query (). Mais il est important de savoir que ces fonctions n'échappent pas aux valeurs de données, vous devez donc vous rappeler d'utiliser mysqli :: real_ escape_ string () ou PDO :: quote () sur les variables de données.

Je recommanderais généralement d’utiliser PDO, sauf s’il existe une raison particulière pour laquelle vous ne pouvez pas. S'il n'y a pas une petite différence entre les deux et que vous n'avez aucune raison de ne pas utiliser PDO, je pense qu'il serait préférable de commencer à utiliser l'abstraction de base de données dans vos applications plutôt que d'utiliser mysql_ * simplement parce qu'il existe déjà. Je dirais que les meilleures pratiques gagnent.

Dans les deux cas, vous appelez le même serveur MySQL depuis le même serveur Php ... afin de ne pas remarquer beaucoup de différence.

Si vous voulez de bonnes performances, pensez au cache (memcache ou fichier Php simple ...) et créez une bonne structure de base de données (INDEX ...)

  • PDO est meilleur que SQl
  • PDO et sa déclaration de préparation fournissent le meilleur code sécurisé contre les injections SQL
  • Le PDO est orienté objet;)
  • PDO est compatible avec certains moteurs de bases de données tels qu'expliqués avant
  • MySQLl_ * est obsolète et sera bientôt supprimé
  • Les PDO fournissent plus de fonctionnalités avec moins de lignes de codes Exemple:

    Pdo

    1. Connecter
    2. Recherchez " < " Et & Quot; & Gt; & Quot; Et & Quot; # & Quot; (Cette vérification des utilisations globales)
    3. préparer
    4. Exécuter
    5. Fermer

MySQL _ *

  1. Connecter
  2. Ajouter une barre oblique inverse
  3. Xsafe
  4. Recherchez " < " Et & Quot; & Gt; & Quot; Et & Quot; # & Quot; (Cette vérification des utilisations globales)
  5. Requête
  6. Fermer

les deux fonctionnalités identiques mais vous comparez les codes Le PDO est plus lisible humainement :) Alors qu'en pensez-vous?

Si la performance n’est pas un " vrai problème " pour vous, vous devriez utiliser PDO. Les performances diffèrent par petites marges, et PDO possède une interface de base de données croisée très agréable et portable qui peut vous éviter quelques maux de tête au cas où vous auriez besoin de plusieurs pilotes de base de données.

La fonction mysql_connect est obsolète à partir de PHP 5.5.0 et, comme pour la plupart des fonctionnalités obsolètes, sera supprimée. Par conséquent, préférez utiliser PDO_MySQL (ou une autre alternative MySQLi ) sur <=>.

Source: http://php.net/manual/fr/function. mysql-connect.php

Quelques avantages du PDO:

  1. Peut accéder à plusieurs bases de données.
  2. Nombreux pilotes de base de données permettant de se connecter avec différentes bases de données.
  3. Lorsque vous passez d'une base de données à une autre, vous n'avez pas besoin d'écrire tout le code pour vous connecter à une nouvelle base de données. Il vous suffit de modifier la chaîne de connexion et les requêtes requises pour la nouvelle base de données.
  4. Il fournit une instruction de préparation, qui est une sorte de modèle de requête compilé une seule fois et pouvant être exécuté autant de fois que vous le souhaitez, en modifiant simplement les attributs appelés emplacements réservés.
  5. Opération générale simple et efficace, comme insérer, mettre à jour ... etc.

Code de connexion à la base de données 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();
}
?>

Code de connexion à la base de données MySQL normal:

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

ou

 <?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.");
?>

Le code de connexion à la base de données MySQL est simple, mais PDO présente de nombreux avantages.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top