OOP Datenbank Klasse

matzseesi

Erfahrenes Mitglied
Hi Leute,

Ich habe bereits ein paar Seiten ohne OOP realisiert. Hat auch immer bestens funktioniert nur habe ich neuerdings von einem Kollegen gehört dass die OOP einiges erleichtert.

Somit habe ich begonnen mir eine Klasse anhand des Tutorials OOP für Anfänger zu basteln welche auch super funktioniert.

Nun stehe ich allerdings vor einem Problem wo ich nicht mehr weiter weiß. Bitte entschuldigt auch falls dies schon öfters gefragt wurde allerdings weiß ich nicht wie ich danach suchen soll.

Meine Klasse heißt db
Darin gibt es Methoden zum ausführen eines sql Querries und zum holen eines Datensatzes (wie es im Tutorial beschrieben ist)

Wenn ich nun folgende Situation habe


PHP:
// Forumtopics auslesen
// anschließend der Reihe nach ausgeben und bei jedem Topic die Anzahl der Antworten
// hinschreiben

$con = new db($db_host,$db_username,$db_password,$database);
$con->query("SELECT count(topictitles) FROM `topic`;");
$anzahl=$con->fetchrow();
$con->query("SELECT topictitles FROM `topic`;");
for($i=0;$i<$anzahl[0];$i++)
{ 
 // hier sollen nun die antworten gezählt werden! allerdings überschreibe ich da den alten 
 // Querry oder?
 $con->query("SELECT count(answers) FROM `answers`;")
 echo $anzahl=$con->fetchrow();
 $row=$con->fetcharray();
 echo $row['topictitles'];
}

Versteht ihr was ich meine? Muss ich jetzt in der for schleife jedes mal wieder eine neue Klasse öffnen oder wie funktioniert das in dem fall?

Danke schon mal für die Antworten

Mfg

Matthias
 
Wenn du das so machen willst, brauchst du mehrere Klassen. Eine Datenbanken-Klasse und eine Query-Klasse. Die Datenbanken-Klasse generiert Query-Objekte, mit denen du arbeiten kannst. Die Query-Klasse bietet Methoden wie numRows() und Co...

Guck dir mal PEAR::DB an.
 
Hallo,

Erstmal Danke für deine Antwort!
Ich werde mir die ganze Geschichte mit PEAR noch genauer anschauen wenn ich die OOP verstanden habe! aber danke für den Link

Nun habe ich eine Klasse db mit den Connect und Querry Methoden und eine Klasse mit den Methoden zum verarbeiten des Querrys. Nur wie kann ich das übergeben?

PHP:
$con = new db($db_host,$db_username,$db_password,$database);
$query=$con->query("SELECT count(topictitles) FROM `topic`;"); 

// Und dann

$methods = new dbmethods()

$methods->fetcharray($query);

Ist das so richtig?

Danke für deine (eure) Hilfe

Gruß Matthias
 
Hallo,

Tut mir leid dass ich erst jetzt schreibe.

Anbei der Code:

PHP:
$con = new db($db_host,$db_username,$db_password,$database);
$func = new db_functions($query);

$query=$con->query("SELECT topics FROM `topictable`;");

$ROW_test=$func->fetcharray($query);

Hier die Klassen für die Verbindung und den Query:

PHP:
class db
{
   var $host;
   var $username;
   var $password;
   var $db;

   //#### Constructor
   //#######################################################
   function db($db_host="", $db_username="", $db_password="", $db_database="mysql")
   {
      $this->host = $db_host;
      $this->user = $db_username;
      $this->password = $db_password;
      $this->db   = $db_database;
      $this->dbconnect();
   }
	
   //#### Soll eine Verbindung zu einer Datenbank herstellen
   //#######################################################
   function dbconnect()
   {
      if(!$this->con = mysql_connect($this->host, $this->user, $this->password, $this->db))
      {
         die("(Connection) Fehler: " . mysql_error()). "<br/>";
      }
      else 
      {
         $this->selectdb();
      }	
   }
 
   //#### Eine Datenbank auswählen
   //#######################################################
   function selectdb()
   {
      if(!mysql_select_db($this->db, $this->con))
      {
         die("(DB-Auswahl) Fehler: " . mysql_error()) . "<br/>";
      }
      else 
      {
         $result=1;
         return $result;
      }
   }
 
   //#### Einen Datenbank query ausführen
   //#######################################################
   function query ($sql)
   {
      if(!$this->result=mysql_query($sql,$this->con))
      {
         die("(SQL-Query) Fehler: " . mysql_error()) . "<br/>";
      }
   }

Und hier noch um den Query auszulesen:

PHP:
class db_functions
{
   var $query;
 
   function fetcharray($query)
   {
      $row = mysql_fetch_array($query);
      if(!is_array($row))
      {
         return false;
      }
      else 
      {
         return $row;
      }	
   }
	
	
}

So funktioniert es aber nicht da bekomme ich nur Fehlermeldungen:

Code:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in G:\web\seesle.at\kernel\classes\db_functions.class.php on line 9

Weiß wer warum

Danke schon mal im voraus für euere Geduld mit einem Anfänger wie mir

Gruß Matthias
 
Zurück