Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dwa zapytania MySQL pod sobą, resource of mysql->unknown
Forum PHP.pl > Forum > PHP
erix
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?
blooregard
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?
erix
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ł...
blooregard
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
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.