Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Klasa baza i funkcje
Forum PHP.pl > Forum > PHP
metalog
Mam klasę do połączenia z bazą danych

  1. class baza
  2. {
  3. var $ile=0;
  4. var $polaczenie;
  5. var $pdb;
  6. var $wynik;
  7. var $rekord;
  8.  
  9. function polacz($nazwa)
  10. {
  11. $this->polaczenie=mysql_pconnect(DATABASE_HOST,DATABASE_USER,DATABASE_PASSWORD);
  12. $this->pdb=$nazwa;
  13. mysql_select_db($nazwa, $this->polaczenie);
  14. mysql_query('SET CHARSET utf8');
  15. return $this->polaczenie;
  16. }
  17.  
  18. function zamknij()
  19. {
  20. mysql_close($this->polaczenie);
  21. }
  22.  
  23. function zapytanie($klauzula)
  24. {
  25. //echo $klauzula;
  26. $this->wynik=mysql_db_query($this->pdb, $klauzula, $this->polaczenie);
  27. $ile=$this->ile+1;
  28. $this->ile = $ile;
  29. return $this->wynik;
  30. }


Wywołanie:
$baza = new baza();
$baza->polacz(DATABASE_DB)

Wszystko działa jak należy lecz gdy chcę odwołać się do utworzonego obiektu z funkcji:
  1. function test() {
  2. global $baza;
  3. $zapytanie = "select dupa from dupa";
  4. $baza->zapytanie($zapytanie);

dostaje:
Warning: mysql_db_query(): 5 is not a valid MySQL-Link resource in ...."

Co musiałbym zmienić w klasie by nie tworzyć nowego obiektu w funkcji.
maniana
Witam

Ja używam akurat MySQLi i oto takiej klasy podstawowej (rozszerzam sobie ją wedle potrzeb) (PHP5):
  1. <?php
  2. class DB {
  3.  
  4. private $mMysqli;
  5.  
  6. function __construct() {
  7. @$this->mMysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);
  8. if(mysqli_connect_errno()) exit("DB connect failed.");
  9. $this->mMysqli->query("SET NAMES utf8");
  10. }
  11.  
  12. public function __destruct() {
  13. @$this->mMysqli->close();
  14. }
  15.  
  16. public function aQuery($q) {
  17. if($result = $this->mMysqli->query($q))
  18. {
  19. while($row = $result->fetch_assoc()) $aquery[] = $row;
  20. return $aquery;
  21. }else return false;
  22. }
  23.  
  24. public function rQuery($q) {
  25. if($result = $this->mMysqli->query($q)) return $result->fetch_assoc();
  26. else return false;
  27. }
  28.  
  29. public function Query($q) {
  30. if($this->mMysqli->query($q)) return true;
  31. else return false;
  32. }
  33.  
  34. public function InsertID() {
  35. return $this->mMysqli->insert_id;
  36. }
  37.  
  38. public function Affrows() {
  39. return $this->mMysqli->affected_rows;
  40. }
  41.  
  42. public function Error() {
  43. return $this->mMysqli->error;
  44. }
  45.  
  46. }
  47. ?>
W przypadkach o których piszesz działa ok, łatwo też przerobisz na obsługę zwykłego MySQL.
Użycie standardowe, np:
  1. $db = new DB();
  2. function test() {
  3. global $db;
  4. $sql= "select dupa from dupa";
  5. return $db->aQuery($sql);
  6. }
krzotr
Cytat(metalog @ 14.10.2010, 16:06:44 ) *
Co musiałbym zmienić w klasie by nie tworzyć nowego obiektu w funkcji.


Singleton
szok
Nie lepiej użyć PDO? i Klasę napisać w PHP5 ?
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.