Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][SQL] Klasa PDO
Deusx
post 2.08.2010, 20:29:15
Post #1





Grupa: Zarejestrowani
Postów: 126
Pomógł: 2
Dołączył: 27.08.2006

Ostrzeżenie: (0%)
-----


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

Ten post edytował Deusx 2.08.2010, 11:04:16
Go to the top of the page
+Quote Post
erix
post 2.08.2010, 21:06:16
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




  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.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
everth
post 2.08.2010, 21:41:18
Post #3





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

Ostrzeżenie: (0%)
-----


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.


--------------------
Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]!
Go to the top of the page
+Quote Post
erix
post 2.08.2010, 21:47:59
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
everth
post 2.08.2010, 21:54:50
Post #5





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

Ostrzeżenie: (0%)
-----


@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.


--------------------
Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]!
Go to the top of the page
+Quote Post
Deusx
post 2.08.2010, 22:02:35
Post #6





Grupa: Zarejestrowani
Postów: 126
Pomógł: 2
Dołączył: 27.08.2006

Ostrzeżenie: (0%)
-----


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 ?

Ten post edytował Deusx 2.08.2010, 22:05:24
Go to the top of the page
+Quote Post
everth
post 2.08.2010, 22:17:12
Post #7





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

Ostrzeżenie: (0%)
-----


  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.


--------------------
Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]!
Go to the top of the page
+Quote Post
erix
post 2.08.2010, 22:17:21
Post #8





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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)


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
everth
post 2.08.2010, 22:50:22
Post #9





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

Ostrzeżenie: (0%)
-----


@erix - jak tam wolisz, dla mnie to nie zaprzeczenie tylko instrukcja warunkowa tongue.gif


--------------------
Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]!
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 15.08.2025 - 03:32