![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 230 Pomógł: 3 Dołączył: 8.01.2008 Ostrzeżenie: (10%) ![]() ![]() |
Odkąd tylko pracuje z MySQL, używam biblioteki AdoDB - do obsługi baz danych. Chciałem zapytać profesjonalistów, co bardziej się opłaca - wykonywać zapytania ręcznie poprzez fetch, czy używać jakiejś biblioteki do baz danych? AdoDB posiada takie funkcje jak GetOne - pobranie jednego rekordu do zmiennej, GetCol - pobranie kolumny, GetRow - pobranie wiersza itp.
Proszę o wasze opinie, co jest wydajniejsze, co jest poprawniejsze i co wygodniejsze w użyciu (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Po prostu jak radzicie pracować z bazami MySQL (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) (ta biblioteka AdoDB ma około 2MB) Zrobiłem małe testy czasowe AdoDB i ręcznych zapytań, i ręczne wypadają ok. 3x szybciej (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Tylko że przy AdoDB piszę się mniej kodu, wygodniej nieco się pracuje z bazami. Tylko stosując ręczne zapytania, trzebaby się wyposażyć w jakąś funkcję zabezpieczającą zmienne wprowadzane do zapytań SQL z zewnątrz przed SQL Injection - tj. dodawanie apostrofów w odpowiednich miejscach itp. |
|
|
![]() |
![]() ![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 230 Pomógł: 3 Dołączył: 8.01.2008 Ostrzeżenie: (10%) ![]() ![]() |
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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) 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. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) 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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Aha i jeszcze co do tego rozszerzenia Open Power Driver - używał tego ktoś kiedyś? Ten post edytował Apocalyptiq 22.10.2008, 19:18:43 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 10.10.2025 - 22:37 |