Normal mysql_connect vs PHP PDO

9 Cevap php

PHP veritabanı sorguları yürütmek için php PDO veya normal mysql_connect kullanmalı mıyım?

Hangisi daha hızlı?

One of the big benefits of PDO is that the interface is consistent across multiple databases. There are some cool functions for prepared statements too, which take some of the hassle out of escaping all your query strings. The portability of PDO is greater than mysql_connect.

Yani, geleneksel mysql_connect için bu nedenlerle ya da sopa için PDO kullanmalıyım?

9 Cevap

PDO is a bit slower than the mysql_* But it has great portability. PDO provides single interface across multiple databases. That means you can use multiple DB without using mysql_query for mysql, mssql_query for MS sql etc. Just use something like $db->query("INSERT INTO...") always. No matter what DB driver you are using.

Bu nedenle, daha büyük ya da taşınabilir bir proje için PDO tercih edilir. Hatta Zend Framework PDO kullanabilirsiniz.

Bazı hızlı zamanlamaları PDO bağlamakla biraz daha hızlı olduğunu gösteriyor.

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

Gibi sonuçlar verir

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

Hız farkı zaten önemsiz olacak; bir ağ bağlantısı kurma olasılığı mysql sunucu başka bir host üzerinde, özellikle de uzun PDO tarafından yapılan herhangi bir yükü daha çok alacaktır.

Sen PDO kendiniz kullanmak için tüm nedenleri bahsetti. Gerçekten, PDO kullanabilir ya da ya doğrudan * işlevleri mysql_ asla kullanmayın some other library.

Ben sorgularının birkaç yapıyorum sürece: bir fark olup olmadığını bilmiyorum, ve ben honnestly umurumda değil - Ben hız insanlar PDO kullanarak zaman aradığınızı olduğunu sanmıyorum bir sayfa oluştururken veritabanı, PHP tarafında milisaniye birkaç şey değişmez.

Göre PDO ile iki / üç büyük şeyler vardır mysql_* :

BTW: - ya "elle", ya da Zend Framework ve / veya Doctrine tarafından kullanılma / entegre gibi ben genelde PDO kullanıyorum.


As a sidenote : Even if you are not going to use PDO, note that using mysqli instead of mysql is recommended.

this page of the PHP manual, bu konuda bkz.

Yapamazsın, belirli bir neden olmadıkça ben genelde PDO kullanarak öneriyoruz. Orada ikisi arasında çok az fark olduğunu ve PDO kullanmak için hiçbir nedeniniz varsa, ben orada olduğunu, çünkü bunun mysql_ * ile giderek daha da uygulamalar DB soyutlama kullanarak uygulamaya almak için daha iyi olacağına inanıyorum. Ben iyi uygulama kazanmasına izin söyleyebilirim.

Ben (select mysqlnd açıklamalarda ve MyISAM tabloları kullanılarak test) hazırlanan tablolar ve düzenli doğrudan sorguları her ikisini de kullanarak PDO işlevlerine Mysqli fonksiyonlarını karşılaştırmak için bazı performans test yaptım.

Ben PDO sorguları sadece biraz MySQLi daha sadece biraz yavaş, ama bulundu. PDO Bu amaçla Mysqli işlevlerini çağıran çoğunlukla sadece bir sarıcı kullanılan beri bu mantıklı. PDO kullanarak avantajı fonksiyon isimleri MySQL özgü değildir, çünkü biraz daha farklı bir veritabanına göç yapar olmasıdır.

Gerçek performans fark hazırlanmış sorguları kullanmak ister bulunmaktadır. Bir büyük ve önemli performans penalty hazırlanmış sorguları kullanarak vardır. Onları test ettik diğer insanların aynı sonuçları bulduk.

Eğer farklı veri değerleri ile bunu binlerce kez göndererek bir kez ve daha sonra bir sorgu hazırlıyor eğer hazırlanmış sorguları daha hızlı tek zamandır. Aksi takdirde, mysqli :: sorgu () veya PDO :: query () kullanmak için her zaman hızlı. Ama bu fonksiyonlar sizin için veri değerleri kaçış yok farkında olmak önemlidir, bu yüzden veri değişkenler üzerinde mysqli :: real_ escape_ dize () veya PDO :: quote () kullanmak için hatırlamamız gerekiyor.

Her iki durumda da, bu yüzden fark çok fark edemez ... Aynı Php sunucudan aynı mySQL sunucusunu aramak.

Eğer iyi bir performans istiyorsanız, (... INDEX) önbellek (memcache veya basit Php dosyası ...) düşünmek ve iyi bir veri tabanı yapısı olun

Performans sizin için "gerçek bir sorun" değil ise, PDO kullanmalısınız. Performans küçük marjlar ile farklıdır ve PDO çok güzel ve taşınabilir çapraz-veritabanı arayüzü wich size birkaç veritabanı sürücüleri kullanmak için ihtiyaç halinde bazı baş ağrısı kaydedebilirsiniz vardır.

  • PDO SQL daha iyidir
  • PDO Ve O'nun hazırlayın Açıklama SQL enjeksiyon karşı iyi Secure Code sağlayın
  • PDO Object Oriented ;) olduğunu
  • Önce Açıklaması gibi PDO bazı Veritabanları Engine ile uyumlu
  • MySQLl_ * Kaldırılan mı ve yakında silinecektir
  • PDO kodları Örnek az hattı ile daha fazla işlevsellik sağlamak:

    Pdo

    1. Bağlamak
    2. "<" Için kontrol edin Ve ">" ve "#" (küresel kullanımlar için bu onay)
    3. Hazırlamak
    4. Gerçekleştirmek
    5. Yakın

MySQL_*

  1. Bağlamak
  2. Ters kesme ekle
  3. Xsafe
  4. "<" Için kontrol edin Ve ">" ve "#" (küresel kullanımlar için bu onay)
  5. Sorgu
  6. Yakın

both the same functionality but you compare for codes PDO is more Humanly Readable :) So what you think?

mysql_connect function en onaysız özellikleri ile, kaldırılacak gibi, PHP 5.5.0 itibariyle önerilmemektedir ve. Bu yüzden, PDO_MySQL (ya da bir başka alternatif MySQLi) mysql_connect fazla kullanmayı tercih ediyoruz.

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