Problemchen beim Auflisten von Inhalten

Blobb

Mitglied
Hallo,

also ich habe eine db class erstellt die bislang auch wunderbar passte.
Seit ich aber nun das ein weniger verändert habe ist irgendwo der wurm drin.
oder ich steh einfach nur aufm schlauch :)
vllt. kann mir ja von euch einer helfen, wäre prima
erst mal die class

PHP:
class connect 
{ 
 private function error() { ... }
 public function dbconnect() { ... }
 public function dbselect() { ... }
 
 public function select_assoc($sql)
 {
  $this->result = mysql_query($sql, $this->connect);
  if( (!isset($this->result)) || (empty($this->result)) )
  {
    $this->error("Datenbank Query nicht möglich!","".$sql."");
  }
  else
  {
    $row = mysql_fetch_array($this->result, MYSQL_ASSOC);
    return $row;
  }
 }
}

das ganze rufe ich dann wie folgt ab

PHP:
$sql = "SELECT id, name FROM ". DB_TABLE ."";
while ( $row = $db->select_assoc($sql) )
{
echo "$row[id], $row[name] <br />";
}

wie gesagt bislang wurde mir dabei immer eine komplette liste der eingetragenen namen angezeigt.
seit ich die select_assoc() function umgeschrieben habe geht das nicht mehr.
bin ich einfach nur blind oder wo liegt das problem? :)

danke
 
Du führst bei jedem Aufruf das Query aus. Damit wird jeweils eine neue Ressourcenkennung erzeugt und Du erhältst jedes mal nur die erste Ergebniszeile.
Alternativen:
  • Du trennst das Ausführen des Querys von der zeilenweise Ergebnisabfrage oder
  • Du schreibst in der Funktion das gesammte Resultset in ein Array und gibst dieses Array zurück oder
  • Du merkst Dir in der Klasse das Query.
    Hierbei vergleichst Du zu Beginn der Funktion das gespeicherte Query mit dem übergebenen. Sind diese ungleich führst Du das Query aus, ansonsten gibst Du nur die nächste Zeile aus der Ergebnistabelle zurück. Der Ansatz benötigt aber auch eine Reset-Methode, damit Du das gleiche Query in einem Skript auch mehrmals ausführen kannst. Um den Ansatz weiter zu spinnen und auch verschachtelte Querys zu ermöglichen, könnte man die Ressourcenkennung in einem Array, mit dem Query als Index, speichern und der Reset-Methode das Query übergeben, um nur die Ressourcenkennung für ein Query zurück zu setzen.

Gruß hpvw
 
Hi,

also dann wieder so wie ich es vorher hatte :)

PHP:
final public function query($sql)
 {
  $this->result = mysql_query($sql, $this->connect);
  if( (!isset($this->result)) || (empty($this->result)) )
  {
    $this->error("Datenbank Query nicht möglich!","$sql");
  }
  else
  {
    return;
  }
 }

public function fetch_assoc()
{
  $row = mysql_fetch_array($this->result, MYSQL_ASSOC);
  if(!is_array($row))
  {
    return false;
  }
  else
  {
    return $row;
  }
}

Trotzdem danke für antwort
 
Zurück