Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z destruktorem
Forum PHP.pl > Forum > PHP
ounc
Witam, mam klase, którą wykorzystuje do łączenia się z bazą :
  1. <?php
  2. class sql 
  3. {
  4. private $link;
  5. private $result;
  6. public $rows;
  7. public $ilosczapytan;
  8.  
  9. public function __construct() // laczymy sie z baza
  10. {
  11. $this -> link = @mysql_connect('localhost', 'login', 'pass') or die('Nie mozna sie polaczyc z baza');
  12. mysql_select_db('pierwsza', $this -> link) or die('nie mozna wybrac bazy');
  13. }
  14.  
  15. public function __destruct() // zamykamy polaczenie
  16. {
  17. if(is_resource($this -> link))
  18. {
  19. mysql_close($this -> link);
  20. }
  21. } 
  22.  
  23. public function query($query) //zapytanie do bazy
  24. {
  25. $this -> result = mysql_query($query);
  26. $ii=4;
  27. if(strlen(($msg = mysql_error($this->link))) > 0)
  28. {
  29. die('Blad: '.$msg);  
  30. }
  31. $this->ilosczapytan++;  
  32. }
  33.  
  34. public function fetch_row() //pobieramy wyniki
  35. {
  36.  if($this -> rows = mysql_fetch_array($this -> result))
  37.  {
  38.  return 1;
  39.  }  
  40. }  
  41. }
  42.  
  43. ?>

Klasa articles:
  1. <?php
  2. class articles
  3. {
  4. public $db;
  5.  
  6.  function __construct($db)
  7. {
  8. $this -> db = $db;
  9. }
  10. $this->db->query("SELECT * FROM ...");
  11. (...)
  12. ?>

I wykorzystuje ją np. tak:
  1. <?php
  2. require_once('...');
  3. $db = new sql();
  4. $arts = new articles($db);
  5. $arts->display(1);
  6. $arts->display(2);
  7.  
  8. ?>

Wtedy dostaje blad:
Kod
Warning: mysql_error(): 6 is not a valid MySQL-Link resource in sql.php
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in sql.php

Jeśli usune destruktor wszystko jest OK
I pytanie czemu tak się dzieje ?
LBO
ma to zwiazek napewno z funkcja is_resource().. jaki jednak, tego ci nie powiem...

nie widze też powodu czemu mialbys uzywac tej funkcji, skoro zasoby (resource) zwracaja false w przypadku bledu... nie lepiej uzyc wtedy:
  1. <?php
  2.  
  3. if ($this->link) {
  4. //php code
  5. }
  6.  
  7. ?>


i jeszcze jedno:
  1. <?php
  2.  
  3. public function query($query) //zapytanie do bazy
  4. {
  5. $this -> result = mysql_query($query);
  6. $ii=4; //co to jest? biggrin.gif  
  7. if(strlen(($msg = mysql_error($this->link))) > 0)
  8. {
  9. die('Blad: '.$msg);  
  10. }
  11. $this->ilosczapytan++;  
  12. }
  13.  
  14. ?>
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.