Frage

Soll ich php PDO oder normale mysql_connect zu Datenbankabfragen in PHP ausführen?

Welches ist schneller?

Einer der großen Vorteile von PDO ist, dass die Schnittstelle über mehrere Datenbanken hinweg konsistent ist. Es gibt einige coole Funktionen für vorbereitete Anweisungen zu, die aus einigen der Ärger nehmen alle Saiten Ihrer Anfrage zu entkommen. Die Übertragbarkeit von PDO größer als mysql_connect.

Also soll ich PDO aus diesen Gründen oder zum traditionellen mysql_connect bleiben?

War es hilfreich?

Lösung

PDO ist ein bisschen langsamer als die mysql_ * Aber es hat große Beweglichkeit. PDO bietet einzelne Schnittstelle über mehrere Datenbanken. Das bedeutet, dass Sie mehrere DB ohne Verwendung mysql_query für mysql, mssql_query für MS SQL usw. Verwenden Sie einfach so etwas wie $ db-> query ( "INSERT INTO ...") immer verwenden können. Egal, welche DB-Treiber Sie verwenden.

Also, für größere oder portable Projekt PDO vorzuziehen. Auch zend framework Verwendung PDO.

Andere Tipps

Einige schnelle Timings zeigen PDO ist etwas schneller zu verbinden.

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

Gibt Ergebnisse wie

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

Die Geschwindigkeitsdifferenz vernachlässigbar sowieso; eine Netzwerkverbindung hergestellt wird viel länger als jede Overhead durch PDO entsteht wahrscheinlich nehmen, vor allem, wenn der MySQL-Server auf einem anderen Host ist.

Sie haben erwähnt, alle Gründe PDO selbst zu verwenden. Wirklich, nie die mysql_ * Funktionen direkt, entweder PDO verwenden, oder verwenden Sie etwas andere Bibliothek .

Ich glaube nicht, Geschwindigkeit ist das, was die Menschen suchen, wenn sie PDO verwenden - ich weiß nicht, ob es einen Unterschied gibt, und ich sorge mich zum Glück unwichtig nicht: so lange, wie ich ein paar mache von Anfragen an eine Datenbank, wenn eine Seite, ein paar Millisekunden auf der PHP-Seite etwas zu erzeugen wird sich nicht ändern.

Es gibt zwei / drei große Dinge mit PDO, im Vergleich zu mysql_* :

  • mehr oder weniger konstant Schnittstelle accross Datenbanken; besser als die Verwendung von mysql_*, pg_*, oci_*, ...
  • Objektorientierte API ( mysqli_* hat eine OO-API, aber mysql_* nicht)
  • Unterstützung neue Funktionen von MySQL> = 4.1 (gleich wie mysqli_*, aber nicht mysql_*, wieder)

BTW: Ich bin im Allgemeinen PDO mit - entweder "von Hand", oder wie es integriert in / verwendet von Zend Rahmen und / oder Lehre .


Als Nebenbemerkung: Auch wenn Sie nicht PDO nicht benutzen wollen, dann beachten Sie, dass Mysqli statt mysql empfohlen

.

Siehe dieser Seite des PHP-Handbuch , darüber.

  • Mit PDO Sie können Anwendungen params binded und dass die meisten SQL-Injection-Angriffe verhindern.
  • Sie können mehr Geschwindigkeit gewinnen mit PDO-Anweisungen vorbereitet.
  • Standardschnittstelle zu allen db Backends
  • Es gibt eine Reihe von nützlichen Methoden (wie der Abruf * Familie)

ich einige Performance-Tests haben Mysqli Funktionen PDO Funktionen sowohl vorbereitete Anweisungen und regelmäßige direkte Abfragen (getestet mit select-Anweisungen auf mysqlnd und MyISAM-Tabellen) zu vergleichen.

Ich fand, dass PDO-Abfragen sind nur etwas langsamer als Mysqli, aber nur leicht. Dies macht Sinn, da PDO für diesen Zweck verwendet meist nur ein Wrapper, der Mysqli Funktionen aufruft. Der Vorteil PDO ist, dass es es ein wenig einfacher macht in eine andere Datenbank zu migrieren, da die Funktionsnamen zu MySQL nicht spezifisch sind.

Der wirkliche Unterschied in der Leistung ist in, ob Sie bereit Abfragen verwenden. Es gibt eine große und bedeutende Leistung Strafe auf vorbereitete Abfragen. Andere Personen, die getestet haben sie haben die gleichen Ergebnisse.

Die einzige Zeit vorbereiteten Abfragen schneller sind, wenn Sie eine Abfrage einmal vorbereiten und dann tausendfach mit unterschiedlichen Datenwerten einreichen. Ansonsten ist es immer schneller mysqli :: query () oder PDO :: query () zu verwenden. Aber es ist wichtig, sich bewusst sein, dass diese Funktionen nicht entweichen Datenwerte für Sie, so müssen Sie daran denken mysqli :: REAL_ escape_ String () oder PDO :: quote () auf Datenvariablen.

würde ich in der Regel empfehlen PDO verwenden, es sei denn es einen bestimmten Grund ist kann man nicht. Wenn es keinen kleinen Unterschied zwischen den beiden ist, und Sie haben keinen Grund, nicht PDO zu verwenden, ich glaube, es wäre besser, in die Praxis zu bekommen verwenden DB Abstraktion in Ihre Anwendungen als mit mysql_ gehen *, nur weil es da ist. Ich würde sagen, am beste Praxis gewinnen lassen.

In beiden Fällen rufen Sie die gleiche mySQL-Server aus der gleichen Php-Server ..., so dass Sie nicht viel Unterschied feststellen können.

Wenn Sie eine gute Leistung wollen, denken Sie Cache (memcache oder einfache Php-Datei ...) und eine gute Datenbankstruktur machen (INDEX ...)

  • PDO ist besser als SQl
  • PDO und seine Vorbereitung Erklärung für Secure Code gegen SQL-Injection Geben Sie
  • PDO ist objektorientiert;)
  • ist PDO kompatibel mit einigen Motor Datenbanken Wie zuvor erläutert wurde
  • MySQLl_ * ist veraltet und wird in Kürze entfernt werden
  • PDO bietet mehr Funktionalität mit weniger Linie Codes Beispiel:

    Pdo

    1. Verbinden
    2. Überprüfen Sie für "<" und ">" und "#" (Diese Prüfung für globale Anwendungen)
    3. Planen
    4. Ausführen
    5. Schließen

MySQL _ *

  1. Verbinden
  2. Fügen Sie Aufkantung
  3. Xsafe
  4. Überprüfen Sie für "<" und ">" und "#" (Diese Prüfung für globale Anwendungen)
  5. Abfrage
  6. Schließen

beide die gleiche Funktionalität, aber Sie vergleichen für Codes PDO ist Menschlich Lesbare :) Also was denkst du?

Wenn die Leistung nicht ein „echtes Problem“ für Sie ist, sollten Sie PDO verwenden. Die Leistung unterscheidet sich von geringen Margen und PDO hat eine sehr schöne und tragbare Cross-Datenbank-Schnittstelle Weichen Ihnen einige Kopfschmerzen im Fall sparen, können Sie mehrere Datenbanktreiber verwenden müssen.

Die mysql_connect Funktion ist ab PHP veraltet 5.5.0 und wie bei den meisten veralteten Funktionen, wird entfernt. Daher bevorzugen pdo_mysql (oder eine andere Alternative MySQLi ) über mysql_connect

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

Einige Vorteile von PDO:

  1. Können mehrere Datenbank zugreifen.
  2. viele Datenbanktreiber bereitgestellt mit verschiedenen anderen Datenbank zu verbinden.
  3. Wenn Sie von einer Datenbank in einer anderen Datenbank zu wechseln, müssen Sie nicht die gesamten Code zu schreiben, mit neuer Datenbank zu verbinden, ändern Sie einfach die Verbindungszeichenfolge und eine Abfrage, die für neue Datenbank erforderlich ist.
  4. Sie bietet Anweisung vorzubereiten, die eine Art Vorlage der Abfrage, die nur einmal kompiliert und kann beliebig oft ausgeführt werden, wie Sie möchten, indem nur die Attribute zu ändern, die Platzhalter genannt wird.
  5. Einfache und effiziente Allgemeine Bedienung wie-Insert, Update ... etc.

PDO-Datenbankverbindungscode:

<?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();
}
?>

Normaler MySQL-Datenbank-Verbindungscode:

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

oder

 <?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-Datenbank-Verbindungscode einfach, aber PDO viele Vorteile hat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top