MySQL-Link als Klassenvariable
MySQL-Link als Klassenvariable
am 21.11.2004 12:55:42 von Henrik Ronellenfitsch
Hallo, NG!
Ich möchte mir (mit PHP5) eine kleine Wrapperklasse für die
mysql_...-Funktionen schreiben, um sie objektorientiert ansprechen zu
können. Die Klasse sieht momentan folgendermaßen aus:
class DbAccess
{
// The Handle to the database
private $db_handle;
// Constructor
// Creates an initializes the DB Link
function __construct()
{
// Establish db connection
$this->db_handle = mysql_connect("host", "user", "pwd");
mysql_select_db($this->db_handle, "db");
}
// Closes db link
function __destruct()
{
mysql_close($this->db_handle);
}
}
Versuche ich nun, die Klasse aufzurufen, so erhalte ich folgenden Fehler:
Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link
resource in C:\Programme\Apache Group\Apache2\htdocs\update\database.php
Ich vermute, dass die $db_handle variable irgendwie falsch gesetzt ist,
ein der Doku konnte ich allerdings nichts dazu finden.
Kann mir jemand helfen?
Danke, Henrik
Re: MySQL-Link als Klassenvariable
am 21.11.2004 13:04:08 von Joerg Behrens
"Henrik Ronellenfitsch" schrieb im
Newsbeitrag news:cnpvln$o4c$04$1@news.t-online.com...
> Hallo, NG!
> Ich möchte mir (mit PHP5) eine kleine Wrapperklasse für die
> mysql_...-Funktionen schreiben, um sie objektorientiert ansprechen zu
> können. Die Klasse sieht momentan folgendermaßen aus:
>
> class DbAccess
> {
> // The Handle to the database
> private $db_handle;
>
> // Constructor
> // Creates an initializes the DB Link
> function __construct()
> {
> // Establish db connection
> $this->db_handle = mysql_connect("host", "user", "pwd");
> mysql_select_db($this->db_handle, "db");
> }
>
> // Closes db link
> function __destruct()
> {
> mysql_close($this->db_handle);
> }
> }
>
> Versuche ich nun, die Klasse aufzurufen, so erhalte ich folgenden Fehler:
>
> Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link
> resource in C:\Programme\Apache Group\Apache2\htdocs\update\database.php
>
> Ich vermute, dass die $db_handle variable irgendwie falsch gesetzt ist,
> ein der Doku konnte ich allerdings nichts dazu finden.
> Kann mir jemand helfen?
Bau eine Fehlerbehandlung ein.... oder faehrst du Nachsts auch ohne Licht
mit deinem Auto?
Wenn es dann Mal geht wird dir auffallen das das Eintragen der host,user,
pwd uns db in der Basisklasse selber unpraktisch ist. Mache dann also eine
Ableitung welche z.b in einer Config definiert werden kann.
Gruss
Joerg
Re: MySQL-Link als Klassenvariable
am 21.11.2004 14:14:35 von Henrik Ronellenfitsch
Hallo,
Joerg Behrens wrote:
> oder faehrst du Nachsts auch ohne Licht
> mit deinem Auto?
Wohl kaum, da ich mit 17 Jahren kein Auto besitze ;)
Config-Datei habe ich jetzt implementiert und den Fehler habe ich auch
ausfindig machen können, denn statt
mysql_select_db($this->db_handle, Config::db_database);
muss es
mysql_select_db(Config::db_database, $this->db_handle);
heißen.
Trotzdem Danke!
Re: MySQL-Link als Klassenvariable
am 22.11.2004 12:02:06 von Frank Schenk
Henrik Ronellenfitsch wrote:
> Config-Datei habe ich jetzt implementiert und den Fehler habe ich auch
> ausfindig machen können, denn statt
>
> mysql_select_db($this->db_handle, Config::db_database);
>
> muss es
>
> mysql_select_db(Config::db_database, $this->db_handle);
Pass auf, dass du dir keine Späne einfängst, du bist auf dem Holzweg!
Gruss, Frank
Re: MySQL-Link als Klassenvariable
am 22.11.2004 17:05:02 von Henrik Ronellenfitsch
Frank Schenk wrote:
> Pass auf, dass du dir keine Späne einfängst, du bist auf dem Holzweg!
Inwiefern, wenn die Frage erlaubt ist?
Henrik
Re: MySQL-Link als Klassenvariable
am 22.11.2004 17:37:55 von Frank Schenk
Henrik Ronellenfitsch wrote:
> Frank Schenk wrote:
>
>> Pass auf, dass du dir keine Späne einfängst, du bist auf dem Holzweg!
>
> Inwiefern, wenn die Frage erlaubt ist?
>
Nun, das mit den vertauschten Parametern ist schon ok aber:
- du mischst munter Klassen und Objekte - entweder oder
mysql_select_db(Config::db_database, $this->db_handle);
- du hast keinerlei Fehlerbehandlung (Man sollte Resourcen prüfen bevor
man sie verwendet)
> // Establish db connection
> $this->db_handle = mysql_connect("host", "user", "pwd");
Hier gehört ein "if($this->db_handle)" hin
> mysql_select_db($this->db_handle, "db");
Und das:
Joerg Behrens wrote:
> Wenn es dann Mal geht wird dir auffallen das das Eintragen der
> host,user, pwd uns db in der Basisklasse selber unpraktisch ist.
> Mache dann also eine Ableitung welche z.b in einer Config definiert
> werden kann.
hast du auch nicht verstanden.
// allgemeiner abstraction layer
class DbAccess {
var $host;
var $user;
var $password;
var $databasename;
....
}
// Ableitung für eine bestimmte Datenbank
// (gibt andere Möglichkeiten, die finde ich aber am Besten)
class myDB extends DbAccess {
var $host = "example.org;
var $user = "example";
var $password = "password";
var $databasename = "database";
}
// Objekt erzeugen
$o_db =& new $myDB;