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;