Problem mit mysql Klasse

xtramen01

Erfahrenes Mitglied
Hallo Leute,

habe mir gerade eine MySQL Klasse aus einem Tutorial angeschaut und getestet.
Leider bekomme ich keine Ausgabe und auch keine Fehlermeldung wenn ich eine Abfrage ausführe....siehe ganz unten im Code.

Vielleicht liegt es ja an register_globals? Hat jemand ne Idee? Auf herkömmliche weise gehts einwandfrei.

PHP:
<?php

##### Hier folgen die Einstellungen der Verbindungen

define("DB_STANDARD", 1);

# Verbindung 'STANDARD'
$mySQL_settings[1]['host'] = 'localhost';
$mySQL_settings[1]['user'] = 'root';
$mySQL_settings[1]['pswd'] = '';
$mySQL_settings[1]['dbname'] = 'cms';

####################

class mySQL {
var $connected = FALSE;
var $host;
var $user;
var $pswd;
var $dbname;
var $verbindung;
var $sql_query;
var $query_counter;

function mySQL($ID = DB_STANDARD) {
global $mySQL_settings;
$this->host = $mySQL_settings[$ID]['host'];
$this->user = $mySQL_settings[$ID]['user'];
$this->pswd = $mySQL_settings[$ID]['pswd'];
$this->dbname = $mySQL_settings[$ID]['dbname'];
$this->verbindung = @mysql_connect($this->host, $this->user, $this->pswd);
if ($this->verbindung === FALSE) {
$this->error("CONN.OPEN");
}
if (@mysql_select_db($this->dbname, $this->verbindung) === FALSE) {
$this->error("DB.SELECT");
} else {
$this->connected = TRUE;
}
}

// wenn das Skript nicht mit PHP5 ausgeführt wird, folgende Funktion einfach löschen!
function __destruct() {
if (!$this->connected) {
$this->error("NO CONN");
} else {
if (@mysql_close($this->verbindung) === FALSE) {
$this->error("CONN.CLOSE");
}
}
}

function DBQueries() {
if (!$this->connected) {
$this->error("NO CONN");
} else {
return $this->query_counter;
}
}

function DrawDBQueries() {
if (!$this->connected) {
$this->error("NO CONN");
} else {
if ($this->DBQueries == 1) {
$text = "Es war 1 mySQL-Abfrage nötig";
} else {
$text = "Es waren ".$this->DBQueries." mySQL Abfragen nötig";
}
}
return $text;
}

function query($sql) {
if (!$this->connected) {
$this->error("NO CONN");
} else {
$this->sql_query = $sql;
$this->query_counter++;
$result = @mysql_query($this->sql_query, $this->verbindung);
if ($result === FALSE) {
$this->error("QUERY FAILED");
} else {
return $result;
}
}
}

function select($sql, $anzahl = NULL) {
if (!$this->connected) {
$this->error("NO CONN");
} else {
$result = $this->query($sql);
if ($result !== FALSE) {
$anzahl1 = @mysql_num_rows($result);
$anzahl = $anzahl1;
for($i = 0; $i < $anzahl; $i++) {
$array[$i] = @mysql_fetch_object($result);
}
}
}
return $array;
}

function error($error_type) {
switch ($error_type) {
case 'CONN.OPEN':
$text = "Beim Öffnen der Verbindung ist ein Fehler aufgetreten";
break;

case 'CONN.CLOSE':
$text = "Beim Schließen der Verbindung ist ein Fehler aufgetreten";
break;

case 'NO CONN':
$text = "Die angeforderte Aktion konnte nicht durchgeführt werden, da keine Verbindung zur Datenbank besteht!";
break;

case 'DB.SELECT':
$text = "Beim Auswählen der Datenbank ist ein Fehle aufgetreten. Ev. ist die Datenbank nicht vorhanden";
break;

case 'QUERY FAILED':
$text = "Während folgender Abfrage ist ein Fehler aufgetreten:\n\n".$this->sql_query;
break;

default:
$text = "Es ist folgender, unbekannter Fehler aufgetreten: ".$error_type;
}
if ($this->connected) {
$text .= "\n\nmySQL meldet:\nFehler-Nummer: ".@mysql_errno($this->verbindung)."\nFehler-Beschreibung: ".@mysql_error($this->verbindung);
}
echo $text."\n";
}

}



$sql = new mySQL(); // neue Verbindung zu DB_TEST
$daten = $sql->select("SELECT * FROM config"); // einfache Abfrage 

 echo $daten->plz;
?>

Gruss
 
Hallo,

siehe Inline Kommentar, welche PHP Version läuft denn auf den Server?

PHP:
// wenn das Skript nicht mit PHP5 ausgeführt wird, folgende Funktion einfach löschen!
function __destruct() {
if (!$this->connected) {
$this->error("NO CONN");
} else {
if (@mysql_close($this->verbindung) === FALSE) {
$this->error("CONN.CLOSE");
}
}
}
 
nehme mal die @ zeichen weg, dann bekommst du den Fehler und poste...

PHP:
default:
$text = "Es ist folgender, unbekannter Fehler aufgetreten: ".$error_type;
}
if ($this->connected) {
$text .= "\n\nmySQL meldet:\nFehler-Nummer: ".@mysql_errno($this->verbindung)."\nFehler-Beschreibung: ".@mysql_error($this->verbindung);
}
echo $text."\n";
}

}
 
Naja das ist es ja, es kommt kein Fehler :-( .

Gruss

Ok, poste mal den Scriptteil wo du eine Instanz der Klasse anlegst. Bin mir sicher, es läuft keine... Wenn ja dann mach mal ein
PHP:
die('Hallo ich bin die Klasse'  );
im Konstruktor der Klasse.

Beispiel:

PHP:
function mySQL($ID = DB_STANDARD) {
die('Hallo ich bin die Klasse' );
global $mySQL_settings;
$this->host = $mySQL_settings[$ID]['host'];
$this->user = $mySQL_settings[$ID]['user'];
$this->pswd = $mySQL_settings[$ID]['pswd'];
$this->dbname = $mySQL_settings[$ID]['dbname'];
$this->verbindung = @mysql_connect($this->host, $this->user, $this->pswd);
if ($this->verbindung === FALSE) {
$this->error("CONN.OPEN");
}
if (@mysql_select_db($this->dbname, $this->verbindung) === FALSE) {
$this->error("DB.SELECT");
} else {
$this->connected = TRUE;
}
}

Gruss
 
Gesagt, getan....!

Es wird dann "Hallo ich bin die Klasse" ausgegeben.

Ich bin mir nicht ganz sicher aber muss ich vorher noch irgendwie die DB Connection extra herstellen? EIgentlich wird die doch automatisch beim Aufruf der Klasse hergestellt oder nicht?

Ach ich steh voll aufm Schlauch.

Gruss
 
mach mal aus "echo" ein "die"
und zwar hier

PHP:
if ($this->connected) {
$text .= "\n\nmySQL meldet:\nFehler-Nummer: ".@mysql_errno($this->verbindung)."\nFehler-Beschreibung: ".@mysql_error($this->verbindung);
}
echo $text."\n";
}
 
Bitte hier($this->verbindung = @mysql_connect) das @ wegnehmen

PHP:
function mySQL($ID = DB_STANDARD) {
global $mySQL_settings;
$this->host = $mySQL_settings[$ID]['host'];
$this->user = $mySQL_settings[$ID]['user'];
$this->pswd = $mySQL_settings[$ID]['pswd'];
$this->dbname = $mySQL_settings[$ID]['dbname'];
$this->verbindung = @mysql_connect($this->host, $this->user, $this->pswd);
 
Zurück