Problem mit eigener MySQL Class

Gunah

Erfahrenes Mitglied
moin allerseits

ich hab ein Problem mit meiner eigenen Class... und zwar kommt folgender Fehler:
Code:
Warning:  mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /srv/www/web6/html/acp/lib/class_db.inc.php on line **
wie man raten kann is in der fehler bei mysql_fetch_array folgendes:
PHP:
<?php
class db {
    var $user='';
    var $password='';
    var $dbname='';
    var $host='';

    function db($user,$password,$dbname,$host='localhost') {
    $this->connect($host,$user,$password);
    $this->db_select($dbname);
    }
    function connect($host,$user,$password) {
      $this->link_id=@mysql_connect($host, $user, $password) or die('Connection Lost to Database');
    }
    function db_select($dbname) {
      $this->dbsel = @mysql_select_db($dbname,@$this->link_id) or die ('Can\'t use database '.$this->html($dname));
      return $this->dbsel;
    }
    function query($search) {
    $this->thequery=$search;
    $this->query_id = @mysql_query($search,$this->link_id) ? "":$this->error();
    return $this->query_id;
    }
    function fetch_array($query_id=-1) {
    if ($query_id!=-1) $this->query_id=$query_id;
    return @mysql_fetch_array($this->query_id);
    }
    function insert_id() {
    return @mysql_insert_id($this->link_id);
    }
    function num_rows($query) {
    return @mysql_num_rows($query,$this->link_id);
    }
    function real_escape_string($result) {
    return @mysql_real_escape_string(stripslashes($result),$this->link_id);
    }
    function error() {
        echo '<html><head><title>ERROR</title></head><body>';
        echo "<div>Database Error</div>\n";
        echo '<div>SQL: '.$this->html($this->thequery).'</div>';
        echo "<div>MYSQL-ERROR: ".$this->html(mysql_error($this->link_id))."</div>\n";
        echo "<div>MYSQL-ERROR-NUMBER: ".$this->html(mysql_errno($this->link_id))."</div>\n";
        echo "<div>DATE: ".date("d.m.Y, H:i")."</div>\n";
        echo "<div>SCRIPT: ".$this->html($_SERVER['REQUEST_URI'])."</div>\n";
        echo "<div>REFERER: ".$this->html($_SERVER['HTTP_REFERER'])."</div>\n";
        echo '</body></html>';
        exit;
//    return mysql_error($this->link_id).'<br>Error Nummer:'.mysql_errno($this->link_id);
    }
    function unbuffered_query($result) {
    return @mysql_unbuffered_query($result,$this->link_id);
    }
    function html($name) {
    return @htmlentities($name, ENT_QUOTES,ISO-8859-15);
    }
}
?>
}
hatte zum Testen alle @ entfernt

hab auch schon gesucht nur irgendwie keine Lösung gefunden :(

EDIT:// Connecten tuh ich so und auslesen der Daten aus der DB...:
PHP:
$db = new db('web6','***','usr_web6_1');
$result=$db->query("SELECT * FROM sc_site WHERE title='Gestaltung' LIMIT 1;");
while($row=$db->fetch_array($result)) {
echo $row['inhalt'];
}

MfG Gunah
 
Zuletzt bearbeitet:
Du speicherst in $this->query_id bei erfolgreicher Query nichts und im Fehlerfall den Rückgabewert von $this->error(). Du musst aber die Ressourcen-Kennung speichern, die [phpf]mysql_query[/phpf] zurückgibt, also:
PHP:
// Falsch:
$this->query_id = @mysql_query($search,$this->link_id) ? "":$this->error();
// Richtig:
    $this->query_id = @mysql_query($search,$this->link_id);
    if($this->query_id === false)
    {
       $this->error();
    }
 
Kleiner Verbesserungsvorschlag für deine Klasse.
Du hast die Variablen
PHP:
    var $user='';
    var $password='';
    var $dbname='';
    var $host='';
nutzt sie aber nicht.

Also entweder den constructor umbauen wo die Variablen einen Wert erhalten.
Die Werte werden ja alle dort übergeben.
Der vorteil in allen folge methoden brauch keine Variable übergeben werden da $this->user,password,dbname,host vorhanden ist.
Oder einfach die Variablen aus der Klasse entfernen.

Ergebniss:
PHP:
    function db($user,$password,$dbname,$host='localhost') {
$this->user = $user; 
$this->password = $password; 
$this->dbname= $dbname; 
$this->host= $host;
    $this->connect();
    $this->db_select();
    }
    function connect(){
      $this->link_id=@mysql_connect($this->host, $this->user, $this->password) or die('Connection Lost to Database');
    }
    function db_select(){
      $this->dbsel = @mysql_select_db($this->dbname,@$this->link_id) or die ('Can\'t use database '.$this->html($this->dname));
      return $this->dbsel;
    }
 
Zurück