Przeczytałem manual z wiki o PDO, no i z tego co tam wyczytałem powoli rezygnuje się z mysql_query, mysql_fetch_assoc itp. A z tego co kojarze, to AdoDB właśnie z tych funkcji korzysta? Tylko posiada zbiór funkcji, ułatwiających korzystanie z tych mysql_query itp? Początkowo myślałem, że PDO to coś podobnego do AdoDB - też zbiór funkcji z tymi mysql_fetch, a tu okazuje się, że to jest osobny obiekt wbudowany w php (bodajrze od wersji 5), no i chyba właśnie nie korzystający z tamtych fetch, tylko jest to całkiem nowe rozwiązanie. Czyli to PDO chyba będzie najlepszym rozwiązaniem do MySQL

W manualu też wyczytałem o rozszerzeniu do PDO - Open Power Driver. Ułatwia bind'owanie (podmienianie w zapytaniu) zmiennych, dodaje też obsługę cache. Ale coś na stronę tego projektu (http://www.openpb.net/) nie mogę wejść :/
Zrobiłem testy czasowe tych trzech sposobów pracy z MySQL - tradycyjne mysql_fetch_assoc, AdoDB i PDO. Oto skrypty pomiarowe:
mysql_fetch_assoc:
Kod
<? function podajCzas(){
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
$start=podajCzas();
if(isset($_GET['id'])){
$sql_conn=mysql_connect('localhost', 'root', 'jo');
mysql_select_db('siatka');
$events=mysql_query('SELECT * FROM events WHERE nr>\''.mysql_real_escape_string($_GET['id']).'\'');
while($event=mysql_fetch_assoc($events)){
echo $event['event'],'<br />';
}
}
echo '<br />fetch: '.round(podajCzas()-$start,3).' sekund';
?>
AdoDB:
Kod
<? function podajCzas(){
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
$start=podajCzas();
if(isset($_GET['id'])){
require_once 'inc/db.php';
foreach($db->GetAll('SELECT * FROM events WHERE nr>'.$db->Quote($_GET['id'])) as $event)
echo $event['event'],'<br />';
}
echo '<br />adodb: '.round(podajCzas()-$start,3).' sekund';
?>
PDO:
Kod
<?php function podajCzas(){
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
$start=podajCzas();
try{
$pdo = new PDO('mysql:host=localhost;dbname=siatka', 'root', 'jo');
$pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if(isset($_GET['id'])){
$players=$pdo->prepare('SELECT * FROM events WHERE nr>:id');
$players->bindValue(':id',$_GET['id'],PDO::PARAM_INT);
$players->execute();
while($player=$players->fetch())
echo $player['event'],'<br />';
$players->closeCursor();
}
}
catch(PDOException $e){
echo 'Wystapil blad biblioteki PDO: ' . $e->getMessage();
}
echo '<br />pdo: '.round(podajCzas()-$start,3).' sekund';
?>
Wykonałem na każdym skrypcie po 14 pomiarów. Oto średnie wyniki:
mysql_fetch_assoc: 0.0259s.
AdoDB: 0.1406s.
PDO: 0.0219s
Zwyciężył nieznacznie PDO, AdoDB wyraźnie wolniejszy od swoich rywalów. I rekord czasowy należy do mysql_fetch_assoc i PDO: egzekwo - 0.004s.
Czyli z tych pomiarów wynika, że najlepszym rozwiązaniem do pracy z MySQL jest PDO. Do tego czytałem, że w następnych wersjach PHP funkcje typu mysql_query mają być wycofane.
Dziękuję wszystkim za dyskuje w tym temacie
Aha i jeszcze co do tego rozszerzenia Open Power Driver - używał tego ktoś kiedyś?