Pregunta

¿Debo usar php PDO o mysql_connect normal para ejecutar consultas de bases de datos en PHP?

¿Cuál es más rápido?

Uno de los grandes beneficios de PDO es que la interfaz es consistente en múltiples bases de datos. También hay algunas funciones interesantes para las declaraciones preparadas, que eliminan algunas molestias de escapar de todas las cadenas de consulta. La portabilidad de PDO es mayor que mysql_connect.

Entonces, ¿debería usar PDO por esas razones o apegarme al mysql_connect tradicional?

¿Fue útil?

Solución

PDO es un poco más lento que mysql_ * Pero tiene una gran portabilidad. PDO proporciona una interfaz única en múltiples bases de datos. Eso significa que puede usar múltiples bases de datos sin usar mysql_query para mysql, mssql_query para MS sql, etc. Simplemente use algo como $ db - & Gt; query (& Quot; INSERT INTO ... & Quot;) siempre . No importa qué controlador de DB esté utilizando.

Entonces, para proyectos más grandes o portátiles, es preferible PDO. Incluso Zend Framework usa PDO.

Otros consejos

Algunos tiempos rápidos indican que PDO es un poco más rápido en la conexión.

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

Da resultados como

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 diferencia de velocidad será insignificante de todos modos; establecer una conexión de red probablemente tomará MUCHO más tiempo que cualquier gasto general incurrido por PDO, especialmente si el servidor mysql está en otro host.

Usted mencionó todas las razones para usar PDO usted mismo. Realmente, nunca use las funciones mysql_ * directamente, use PDO o use some otro biblioteca .

No creo que la velocidad sea lo que buscan las personas cuando usan PDO. No sé si hay una diferencia, y sinceramente no me importa: mientras haga un par de consultas a una base de datos al generar una página, un par de milisegundos en el lado de PHP no cambiarán nada.

Hay dos / tres grandes cosas con PDO, en comparación con mysql_* :

  • Interfaz más o menos constante entre bases de datos; mejor que usar pg_*, oci_*, mysqli_*, ...
  • API orientada a objetos ( <=> tiene una OO-API, pero no <=> )
  • Admite nuevas funciones de MySQL > = 4.1 (igual que <=>, pero no <=>, nuevamente)

Por cierto: generalmente estoy usando PDO, ya sea " a mano " ;, o como está integrado / utilizado por Zend Framework y / o Doctrine .


Como nota al margen: incluso si no va a usar PDO, tenga en cuenta que se recomienda usar mysqli en lugar de mysql.

Consulte esta página del manual de PHP , sobre eso.

  • Con PDO puede usar parámetros vinculados y eso evitará la mayoría de los ataques de inyección SQL.
  • Puede ganar más velocidad utilizando declaraciones preparadas para PDO.
  • interfaz estándar para todos los backends db
  • Hay un montón de métodos útiles (como la familia fetch *)

Hice algunas pruebas de rendimiento para comparar las funciones de Mysqli con las funciones de PDO usando declaraciones preparadas y consultas directas regulares (probadas usando declaraciones de selección en las tablas Mysqlnd y MyISAM).

Descubrí que las consultas PDO son solo un poco más lentas que Mysqli, pero solo un poco. Esto tiene sentido ya que PDO se utiliza para este propósito principalmente como un contenedor que llama a las funciones de Mysqli. La ventaja de usar PDO es que facilita un poco la migración a una base de datos diferente porque los nombres de las funciones no son específicos de MySQL.

La verdadera diferencia de rendimiento está en si usa consultas preparadas. Existe una gran y significativa penalización en el rendimiento al usar consultas preparadas. Otras personas que los han probado han encontrado los mismos resultados.

La única vez que las consultas preparadas son más rápidas es si está preparando una consulta una vez y luego la envía miles de veces con diferentes valores de datos. De lo contrario, siempre es más rápido usar mysqli :: query () o PDO :: query (). Pero es importante tener en cuenta que esas funciones no escapan a los valores de datos por usted, por lo que debe recordar usar mysqli :: real_ escape_ string () o PDO :: quote () en las variables de datos.

Generalmente recomendaría usar PDO a menos que haya una razón específica por la que no pueda hacerlo. Si no hay poca diferencia entre los dos y no tiene ninguna razón para no usar PDO, creo que sería mejor practicar la abstracción de DB en sus aplicaciones que usar mysql_ * simplemente porque está allí. Yo diría que la mejor práctica gane.

En ambos casos, llama al mismo servidor mySQL desde el mismo servidor Php ... por lo que no puede notar mucha diferencia.

Si desea un buen rendimiento, piense en la memoria caché (memcache o archivo Php simple ...) y cree una buena estructura de base de datos (ÍNDICE ...)

  • PDO es mejor que SQl
  • PDO y su declaración de preparación proporcionan el mejor código seguro contra la inyección SQL
  • PDO está orientado a objetos;)
  • PDO es compatible con algunos motores de bases de datos como se explicó anteriormente
  • MySQLl_ * está en desuso y se eliminará pronto
  • PDO proporciona más funcionalidad con menos línea de códigos Ejemplo:

    Pdo

    1. Conectar
    2. Verifique " < " Y & Quot; & Gt; & Quot; Y & Quot; # & Quot; (Esta comprobación para usos globales)
    3. Preparar
    4. Ejecutar
    5. Cerrar

MySQL_ *

  1. Conectar
  2. Añadir barra invertida
  3. Xsafe
  4. Verifique " < " Y & Quot; & Gt; & Quot; Y & Quot; # & Quot; (Esta comprobación para usos globales)
  5. Consulta
  6. Cerrar

ambas la misma funcionalidad pero comparas por códigos PDO es más legible para los humanos :) ¿Y ... que piensas?

Si el rendimiento no es un & "; problema real &"; para ti, debes usar PDO. El rendimiento difiere en pequeños márgenes, y PDO tiene una interfaz de base de datos cruzada muy agradable y portátil que puede ahorrarle algunos dolores de cabeza en caso de que necesite usar varios controladores de base de datos.

La función mysql_connect está en desuso a partir de PHP 5.5.0 y, como con la mayoría de las funciones en desuso, se eliminará. Por lo tanto, prefiera usar PDO_MySQL (u otra alternativa MySQLi ) sobre <=>.

Fuente: http://php.net/manual/en/function. mysql-connect.php

Algunas ventajas de PDO:

  1. Puede acceder a múltiples bases de datos.
  2. Proporcionó muchos controladores de base de datos para conectarse con diferentes bases de datos diferentes.
  3. Cuando cambia de una base de datos a otra, no necesita escribir todo el código para conectarse con una nueva base de datos, simplemente cambie la cadena de conexión y alguna consulta que se requiere para una nueva base de datos.
  4. Proporciona una declaración de preparación que es un tipo de plantilla de consulta que se compila solo una vez y se puede ejecutar tantas veces como desee, simplemente cambiando los atributos que se llaman marcadores de posición.
  5. Operación general fácil y eficiente como: Insertar, actualizar ... etc.

Código de conexión de la base de datos 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();
}
?>

Código de conexión de base de datos MySQL normal:

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

o

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

El código de conexión de la base de datos MySQL es fácil, pero PDO tiene muchas ventajas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top