Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][SQL] Klasa PDO
Forum PHP.pl > Forum > Przedszkole
Deusx
Witam, obecnie w swoim serwisie używam starego typu połączanie z bazą danych. Chciałbym przejść na pdo, jednak nie wiem jak i od czego zacząć.

Kolega mi lekko pomógł, i napisał "wersja bez bindowania":

  1. class gameDataBase extends PDO{
  2. public function doQuery($Query, $Table, $Fetch = false){
  3. global $db, $debug, $numqueries;
  4.  
  5. include('./config.php');
  6.  
  7. $SQLQueryReplace = str_replace("{{table}}", $dbsettings["prefix"] . $Table, $Query);
  8.  
  9. $SQLQuery = $db -> query($SQLQueryReplace) or $debug->error($SQLQueryReplace,"SQL Error");
  10.  
  11. unset($dbsettings);
  12.  
  13. $numqueries++;
  14. $debug->add("<tr><th>Query $numqueries: </th><th>$SQLQueryReplace</th><th>$Table</th><th>$Fetch</th></tr>");
  15.  
  16. if($Fetch){
  17. return $SQLQuery->fetch();
  18. }else{
  19. return $SQLQuery;
  20. }
  21. }
  22. }
  23.  
  24. try{
  25. $db = new gameDataBase('typbazy:host=host;dbname=nazwa bazy', 'użytkownik', 'hasło');
  26. }catch(PDOException $e){
  27. echo 'Połączenie nie mogło zostać utworzone.';
  28. die();
  29. }


Czy dobrze to poskładałem ? Co oznacza "wersja bez bindowania". Jeżeli coś źle zrobiłem bardzo proszę o poprawę.

Jak powinno wyglądać teraz w skrypcie zapytanie ?

  1. pdo -> (zapytanie);


Czy tak ?

Ogólnie chciał bym w jednym pliku mieć całe połączenie, i w każdym pliku po prostu go includować, i tworzyć w prosty sposób zapytania.

up
erix
  1. public function doQuery($Query, $Table, $Fetch = false){
  2. global $db, $debug, $numqueries;

Na co to? O.o

Nie przeciążaj PDO, tylko zrób sobie registry albo wykorzystaj singletona.
everth
Ponieważ nie można przeciążać funkcji wbudowanych to najszybciej (czy najlepiej?) przepisz użyte funkcje mysql_* z prefiksem np. '_' tak żeby zwracały wartości wbudowanych funkcji przez PDO (nie wiem czy z każdą funkcją da się tak zrobić) - później w kodzie projektu prefiksujesz mysql_* i korzystasz z PDO. Jest to obejście, ale jeżeli projekt jest duży to tak będzie szybciej niż przepisywanie wszystkich zapytań na PDO.
erix
Cytat
przepisz użyte funkcje mysql_* z prefiksem np. '_' tak żeby zwracały wartości wbudowanych funkcji przez PDO (nie wiem czy z każdą funkcją da się tak zrobić)

To po co wtedy korzystać z PDO? Zmarnuje tylko czas i zasoby.
everth
@erix - dla jednej bardzo ważnej rzeczy - nie musi babrać się w kodzie, a może np. przenieść bazę na sqlite lub Postgresa (o ile stosuje w miarę zgodne ze standardem zapytania sql) - taki wrapper na obiekt PDO, nie mówię że to optymalne, tylko wygodne.
Deusx
Powiem tak, obecnie mam funkcję "doquery", która łączy mnie z bazą i zapytanie wygląda tak:
doquery(SELECT * FROM users);

Jest to przestarzały system, który szwankuje i chciał bym przejść pod PDO właśnie. Korzystam z mysql i nie będę miał zamiaru przechodzić na inny typ bazy. Co do babrania w kodzie - o to właśnie mi chodzi, i tak muszę przepisać większość zapytań, dlatego chcę też zmienić sposób łączenia z bazą i mieć do tego jakiś debug.

Dlatego też nie chcę w ten funkcji (klasie) żadnych zbędnych rzeczy i proszę o odpowiedź, jak pisać zapytania, tj.

pdo -> (SELECT * FROM users);

Czy tak ?
everth
  1. $pdo = new PDO($config); //nasze 'połaczenie'
  2. $sth = $pdo->query("SELECT costam from gdziestam"); //zwraca obiekt PDOStatement lub false
  3.  
  4. foreach ($sth as $row) {
  5. echo $row['costam'];
  6. }

W manualu masz wszystko gładko i jasno. Tam patrz.
erix
Cytat
@erix - dla jednej bardzo ważnej rzeczy - nie musi babrać się w kodzie, a może np. przenieść bazę na sqlite lub Postgresa (o ile stosuje w miarę zgodne ze standardem zapytania sql)

Sam sobie nieco zaprzeczyłeś:
Cytat
@erix - dla jednej bardzo ważnej rzeczy - nie musi babrać się w kodzie, a może np. przenieść bazę na sqlite lub Postgresa (o ile stosuje w miarę zgodne ze standardem zapytania sql)
everth
@erix - jak tam wolisz, dla mnie to nie zaprzeczenie tylko instrukcja warunkowa tongue.gif
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.