mysqli klasse probleme mit num_rows

grillfleisch

Erfahrenes Mitglied
Hallo, ich habe hier eine klasse.

PHP:
class gc_DB
{
    private $connection;
    
    public function connect($host, $database, $username, $password)
    {
        @$this->connection = new mysqli($host, $username, $password, $database);
        if(mysqli_connect_error()) throw new Exception(__METHOD__.'::'.mysqli_connect_error());
    }
    
    public function close()
    {
        if(!$this->connection) return false;
        $this->connection->close();
    }
    
    public function query($sql, $return='affected', $result_mode=MYSQLI_USE_RESULT)
    {
        if(!$this->connection) throw new Exception('Connection missing');
        
        $data = array();
        
        if($result = $this->connection->query($sql, $result_mode))
        {   
            if ($return=='affected'){ $data = $this->connection->affected_rows; }
            #elseif ($return=='num'){ $result->store_result(); $data = $result->num_rows; }
            elseif ($return=='num'){ $data = $result->num_rows; }
            elseif ($return=='id'){ $data = $this->connection->insert_id; }
            elseif ($return=='assoc'){ while ($row = $result->fetch_assoc()) $data[] = $row; }
            elseif ($return=='numeric'){ while ($row = $result->fetch_assoc()) $row = $result->fetch_array(MYSQLI_NUM); }
            elseif ($return=='fields'){ while ($row = $result->fetch_fields()) $data[] = $row; }
            if (is_object($result)) $result->close();
        }
        else
        {
            throw new Exception(__METHOD__.'::'.$this->connection->error.'::'.$sql);
        };
        return $data;
    }

jedoch gibt mir der befehl
PHP:
 $basedef_num = $db->query("SELECT * FROM `sup` WHERE `supportedVillageID`=884",'num');
  var_dump($basedef_num);

0 aus.


Ich denke mal, dass es auch bei mir was mit "store_result() " zu tun hat, aber wo genau kommt ds hin. alles was ich bisher probiert habe endet in fehlermeldungen.

Vielleicht kann mir ja jemand helfen.

mfg basti
 
Ja, natürlich. Es sind 3 Datensätze vorhanden.

Es funktioniert mit mysql_num_rows(mysql_query(Anweisung));

Selbstverständlich sind die Datwnverbindung für die klasse und das testbeispiel auch zwei unterschiedliche.
 
Dann solltest du es tatsächlich mit store_result() testen, steht auch so als Kommentar im Manual.
Am bsten direkt nach dem Query platzieren ;)
 
Danke,

Ja, das habe ich auch probiert. Ich habe store_result() nach dem query platziert. Jedoch eine Fehlermeldung mit " method on non-Objekt..." erhalten. Laut dem manuell glaube ich, dass es noch vor dem Befehl num_rows plarziert werden muss. In meinem ersten Post, in der klasse, habe ich den Versuch auskommentiert . Dies bringt aber auch eine Fehlermeldung. Wenn ich wieder am PC bin, kann ich die genaue Fehlermeldung ja mal Posten.
 
also ich habe jetzt schon einiges gelesen und probiert leider komme nicht nicht weiter.

ein var_dump(result); meldet:

Code:
bool(true)

object(mysqli_result)#3 (0) {
}

object(mysqli_result)#3 (0) {
}

array(0) { }

object(mysqli_result)#3 (0) {
}

bool(true)

ich habe jetzt es jetzt so probiert

PHP:
public function query($sql, $return='affected', $result_mode=MYSQLI_USE_RESULT)
    {
        if(!$this->connection) throw new Exception('Connection missing');
        
        $data = array();
        
        if($result = $this->connection->query($sql, $result_mode))
        {   
           echo '<pre>';var_dump($result);echo '</pre>';

            if ($return=='affected'){ $data = $this->connection->affected_rows; }
            
            elseif ($return=='num'){ $result->store_result(); $data = $result->num_rows; }
            #elseif ($return=='num'){ $data = $result->num_rows; }
            
            if (is_object($result)) $result->close();
        }
        else
        {
            throw new Exception(__METHOD__.'::'.$this->connection->error.'::'.$sql);
        };
        return $data;
    }

aber er meldet immer
Code:
Fatal error: Call to undefined method mysqli_result::store_result() in
 
Ich würde zwar zu gerne wissen wie es sich mit store_result(); verhält , bzw. warum es nicht so geht wie ich es mir vorstelle.

Manchmal sieht man vor lauter Bäumen den Wald nicht.

store_result(); wieder raus.

Und nach der normalen sql_abfrage eine einfaches count(); tut es auch.

PHP:
$base = $db->query("SELECT * FROM `sup` WHERE `supportedVillageID`=884",'assoc');
echo count ($base ); #<--- das bringt das gesuchte ergebnis.


^^

na dann. bis bald mal wieder.
 
Zuletzt bearbeitet:
Zurück