Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Db klasa
Forum PHP.pl > Forum > PHP > Object-oriented programming
jakis_login
Witam,
Zwracam się o pomoc przy wyborze klasy do obsługi bazy danych mysql. Szukając w google znalazłem coś takiego: http://www.tutorial-portal.com/tutorial/show/id/37.
Całkiem niezła, jednak już funkcja select nie obsługuje np. LEFT JOIN. Jeśli znacie coś lepszego to proszę zapodajcie. Znam też np. PDO ale chciałbym jakąś klasę podobną do tej z mojego linka która była by jeszcze bardziej uniwersalna, optymalna. Z góry dziękuję za pomoc.
mstraczkowski
Doctrine, Propel, Active Record
ano
Wow już dawno nie widziałem tak beznadziejnej klasy do db. Zauważyłeś, że przy każdym zapytaniu tworzy nowe połączenie do mysql?!?! To wystarczający powód, żeby ją zupełnie zdyskwalifikować.
A Ciebie zainteresuje:
http://www.doctrine-project.org/projects/dbal.html
jakis_login
tylko w waszych przykładach raczej trzeba mieć dostęp do konsoli serwera a ja akurat nie mam.
viking
A niby dlaczego tak sądzisz? Swoją drogą to nie rozumiem zupełnie dlaczego nie chcesz PDO. Po pierwsze wszystkie porządne klasy na niej bazują choćby z racji tego że mysql_ już w PHP 5.5 ma E_DEPRECATED. Po drugie właśnie takie klasy jak ta powyżej są zupełnie nieelastyczne, nieprzyszłościowe i tandetnie napisane. Zaufaj ludziom którzy mają jakieś pojęcie o budowie takich systemów i potrafią też w sterowniku choćby jakieś błędy poprawić. Może Ci też do gustu przypaść Zend\Db z ZF1 albo 2.
mstraczkowski
Ja osobiście korzystam z Propela, m.in dlatego że moje aplikacje są wieloplatformowe, tzn że działają Linux/Windows oraz na różnych bazach danych czy to MYSQL czy np. Postgres, ORM pozwala mi zachować wieloplatformowość bazy danych.

Do konfiguracji Propela nie potrzebujesz dostępu do linii komend na serwerze, tylko u siebie, aby utworzyć klasy dla twoich tabel etc.
Na serwer przesyłasz tylko pliki.
jakis_login
OK. Postanowiłem zajrzeć do DOCTRINE i już na początku jestem pod wrażeniem - nie pojawił mi się żadny błąd tylko wszystko odrazu zaczeło działać na tym prostym przykładzie:
  1. // poczatek funkcji
  2. use Doctrine\Common\ClassLoader;
  3. require '/DoctrineDBAL-2.3.2/Doctrine/Common/ClassLoader.php';
  4.  
  5. $classLoader = new ClassLoader('Doctrine', '/DoctrineDBAL-2.3.2');
  6. $classLoader->register();
  7.  
  8. $config = new \Doctrine\DBAL\Configuration();
  9. $connectionParams = array(
  10. 'dbname' => 'kontakty',
  11. 'user' => 'root',
  12. 'password' => '',
  13. 'host' => 'localhost',
  14. 'driver' => 'pdo_mysql',
  15. );
  16. $conn = \Doctrine\DBAL\DriverManager::getConnection($connectionParams, $config);
  17. //koniec funkcji
  18.  
  19.  
  20. $sql = "SELECT * FROM kontakty";
  21. $stmt = $conn->query($sql);
  22.  
  23. while ($row = $stmt->fetch()) {
  24. echo $row['Imie'];
  25. }

a DOCTRINE pobrałem poprzez ZIP i wogóle nie zaglądałem do konsoli. Jednak zauważyłem, że podobny efekt mogę uzuskać stosując "gołe" PDO bez pobierania DOCTRINE etc. a może to tylko moja nie wiedza na ten temat? Moje drugie pytania to czy powyższy przykład byłby w miare poprawny i "na czasie" gdybym w taki mniej więcej sposób brnął dalej tzn. kod w komentarzu poprostu wstawił np. do jakiejś funkcji i tylko w innych funkcjach wywoływał?
viking
Sądzę że Twoje pytanie wynika raczej z braków w samym programowaniu obiektowym. Jeśli byś więcej nad zagadnieniem posiedział, zaczął rozbijać projekt na klasy nie musiałbyś nawet pytać czy to trzeba w "funkcję" wstawiać.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.