Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Dwa zapytania MySQL pod sobą, resource of mysql->unknown
erix
post
Post #1





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




Czołem!

Kadziłem sobie prostą aplikację, wszystko było ok do momentu, gdy nie wywołałem dwóch zapytań pod sobą:

przykładowo:

  1. <?php
  2. //...
  3. function __construct
  4. //...
  5. $this->x = $db->query('...');
  6. $this->y = $db->query('...');
  7. //...
  8. ?>


W powyższym przykładzie $db->query zwraca obiekt, którego jedna ze zmiennych zawiera zasób zwracany przez mysql_query" title="Zobacz w manualu PHP" target="_manual. Wyciągnięte dane są wykorzystywane w innych fragmentach klasy, oczywiście - zwalniane, gdy nie są już potrzebne.

W czym tkwi problem: otóż, gdy wykonywane jest jedno z powyższych zapytań - jest ok. Jednak gdy wykonują się oba, zasób drugiego jest prawidłowy (resource # of mysql), natomiast pierwsze - resource # unknown.

I zonk, gdyż nie wiem kompletnie, o co chodzi...

Gdy wykonam drugie zapytanie ze zwracaniem danych jako zmiennej lokalnej, gdzieś tam dalej, jest ok. Treść zapytań jest prawidłowa.

Znalazłem obejście (wynik zapytania jako zmienna lokalna), ale rozwiązania nie znalazłem...

Czy ktoś spotkał się z podobnym problemem?


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

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
blooregard
post
Post #2


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




Wiesz co, u mnie, jak sobie przed chwilką spłodziłem taki teścik:

class a {
 public $x;
 public $y;
 
 public function __construct() {
  $query_x = "SELECT * FROM users";
  $query_y = "SELECT * FROM categories";
  $this->x = mysql_query($query_x);
  $this->y = mysql_query($query_y);
  
  echo "<pre>";
  var_dump($this->x);
  echo "</pre>";
  
  echo "<pre>";
  var_dump($this->y);
  echo "</pre>";
 }//
 
}


$o = new a();



Wynikiem jest :

resource(3) of type (mysql result)
resource(4) of type (mysql result)


Możesz podać więcej szczegółów?

Ten post edytował blooregard 5.10.2008, 20:39:31


--------------------
Life's simple... You make choices and don't look back...
Go to the top of the page
+Quote Post
erix
post
Post #3





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




Ja mam coś podobnego, ale inaczej wywoływane

  1. <?php
  2. class a {
  3. private $x;
  4. private $y;
  5.  
  6. public function __construct() {
  7.  $this->x = $db->query(...);
  8.  $this->y = $db->query(...);
  9.  
  10.  is_object($this->x);  //true
  11.  is_object($this->y);  //true
  12. }//
  13.  
  14.  
  15. function bleble(){
  16.  //tu byly wywolania docelowe, ale szczegol
  17. }
  18. }
  19. ?>


$db->query() zwraca coś takiego:

  1. <?php
  2. class dbResult{
  3. private $resource = null;
  4.  
  5. function __construct($res){
  6. $this->resource = $res;
  7. }
  8. }
  9.  
  10. //...
  11. function query($q){
  12. //...
  13. return new dbResult(mysql_query($q));
  14. }
  15. ?>


Platforma, Windows XP, Apache2, PHP 5.2.6. Po zmianie z private na public dla $resource w dbResult i var_dump" title="Zobacz w manualu PHP" target="_manual na tą zmienną zwracał odpowiednio resource of unknown, za drugim razem of mysql...

Nie wiem, jakich jeszcze szczegółów byś potrzebował...


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

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
blooregard
post
Post #4


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




qcze, dziwne. Przbudowałem kod, żeby było jak u Ciebie:
Kod
class a {
    private $x = null;
    
    
    public function __construct($res) {
        
        $this->x = $res;
        
        echo "<pre>";
        var_dump($this->x);
        echo "</pre>";
        
    }//
    
}
        
        

function a($query) {
    return new a(mysql_query($query));
}

var_dump(a("SELECT * FROM users"));


i nadal mam:
dla private $x: object(a)#1 (1) { ["x:private"]=> resource(3) of type (mysql result) }
dla public $x: object(a)#1 (1) { ["x"]=> resource(3) of type (mysql result) }

Platforma:
Debian 4.0 Etch
Apache2
PHP: 5.2.0-8+etch11 (cli) (built: May 10 2008 10:46:24)
Copyright © 1997-2006 The PHP Group
Zend Engine v2.2.0, Copyright © 1998-2006 Zend Technologies


--------------------
Life's simple... You make choices and don't look back...
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 Aktualny czas: 20.08.2025 - 00:07