MySQL Klasse

FingerSkill

Erfahrenes Mitglied
Hallo,

ich habe folgende Klasse für MySQL geschrieben:

PHP:
<?
/*
* Name      : mysql.class.php
* Zweck     : Klasse zum Arbeiten mit MySQL
*/

//*******************************************************************************************************/

//Klasse MySQL

  class MySQL
  {

    	private $dbhost;	//Klasseninterne Variable - Host	
	private $dbUser;	//Klasseninterne Variable - Benutzername
	private $dbPass;	//Klasseninterne Variable - Passwort
	private $dbName;	//Klasseninterne Variable - Datenbankname
	private $dbConn;	//Klasseninterne Variable - Datenbankverbindung
	private $dbConnError;	//Klasseninterne Variable - DB-Error
  
//*******************************************************************************************************/

//Konstruktor, liest die Variablen (Zugangsdaten) ein und startet die Methode connectToDB()

    public function __construct($host, $user, $pass, $name)
	{
	  $this->dbhost = $host;	//Wert für den DB-Host in die klasseninterne Variable uebergeben
	  $this->dbUser = $user;	//Wert für den DB-User in die klasseninterne Variable uebergeben
	  $this->dbPass = $pass;	//Wert für das DB-Passwort in die klasseninterne Variable uebergeben
	  $this->dbName = $name;	//Wert für den DB-Namen in die klasseninterne Variable uebergeben
	  
	  $this->connectToDB();		//Starten der Methode connectToDB()
	}
	
//*******************************************************************************************************/

//Verbindet zum MySQL-Server und waehlt eine Datenbank aus

    private function connectToDB()
	{
	  //Baut die Verbindung zum MySQL-Server auf
	  if(!$this->dbConn = @mysql_connect($this->dbhost, $this->dbUser, $this->dbPass))
	  {
            //Gibt einen Fehler aus wenn nicht zur Datenbank verbunden worden konnte.
	    trigger_error('Could not connect to server', E_USER_ERROR);
		$this->dbConnError = true;	//Setzt die klasseninterne Variable dbConnError auf true
	  }
	  //Wählt eine Datenbank aus
	  else if (!@mysql_select_db($this->dbName,$this->dbConn))
	  {
            //Gibt einen Fehler aus wenn keine Datenbank ausgewaehlt worden konnte.
	    trigger_error('Could not select database', E_USER_ERROR);
		$this->dbConnError = true;	//Setzt die klasseninterne Variable dbConnError auf true
	  }
	}
	
//*******************************************************************************************************/

//Fragt MySQL-Fehler ab

    public function isError()
	{
      if($this->dbConnError)
	  {
	    return true;
	  }
	  $error = mysql_error($this->dbConn);
	  if(empty($error))
	  {
	    return false;
	  }
	  else
	  {
	    return true;
	  }
	}
	
//*******************************************************************************************************/

//List Zeilen aus einer Datenbank und giebt die Daten in einem assoziatievem Array welches pro Zeile nummerisch speichert zurueck.

    public function fetchAssoc($select, $from, $add='')
	{
	  $result = mysql_query('SELECT `' . $select . '` FROM `' . $from . '` ' . $add);

          if($result)
          {
            while($row = mysql_fetch_assoc($result))
            {
              $output[] = $row;
            }
            mysql_free_result($result);
            return $output;
          }
          else
          {
          mysql_free_result($result);
          trigger_error('The MySQL Query is not valid', E_USER_ERROR);
          }
	}
  }
?>

Wenn ich dann diese Klasse wie folgt anspreche passiert nichts. Leider kann ich keine Fehlermeldungen auslesen da das System so konfiguriert ist, dass man auch mit error_reporting nichts umstellen kann.

Also hier das Programm welches auf die Klasse MySQL zugreift:
PHP:
require_once('classes/mysql.class.php');

  require_once('config/db.config.php');

  $dbtest = new MySQL(DB_HOST, DB_USER, DB_PASS, DB_NAME);
  $test = $dbtest->fetchAssoc('*', 'Menue_Main', 'ORDER BY `ListID` ASC');

  print_r($test);

Hoffe ihr könnt mir helfen.

Gruss Finga
 
Die zusammengesetzte Abfrage wird nicht gültig sein:
Code:
SELECT `*` FROM `Menue_Main` ORDER BY `ListID` ASC
 
Ich kann mir nicht vorstellen das es daran liegt, String bleibt String.
Ausserdem funktioniert es wenn ich die Query fix in die Methode schreibe auch nicht. :'(

Aber vielen Dank für dein Bemühen.
 
Ahh jetzt verstehe ich wie du das meinst also wenn ich mit Wildcards arbeite muss ich die `` weglassen?

Gruss Finga


Nachtrag: Jupp daran hats gelegen jetzt funktionierts.
 
Zuletzt bearbeitet:
Das ändern

PHP:
$result = mysql_query('SELECT `' . $select . '` FROM `' . $from . '` ' . $add);

So:

PHP:
$result = mysql_query('SELECT ' . $select . ' FROM ' . $from . ' ' . $add);

// Edit Gumbo mal wieder schneller
 
Sieht erstmal alles korrekt aus - auf den ersten Blick

Nimm mal die ` um das * weg, das geht nur wenn Du direkt ein feld angibst
Außerdem:

Ich sehe keine Abfrage der isError(), bist Du sicher, dass die Connection da ist und die Db ausgewählt ist, echo doch mal die query und gib sie direkt ins phpmyadmin oder mysql konsole ein...

[EDIT] Da war ich zu langsam[/EDIT]
 
Zuletzt bearbeitet:
Nur mal als kleine Anmerkung: Du solltest dem User die Moeglichkeit geben auch vollstaendige SQL-Queries uebergeben zu koennen.
Die Methode die Du da hast ist zwar ganz nett, aber sie schraenkt den User doch etwas ein wenn es z.B. in die Richtung komplexerer Queries, z.B. mit JOIN oder Sub-Queries geht.
 
Natuerlich wird es noch mehrere Methoden geben aber ich benoetige zur Zeit nur diese. Im laufe der Zeit werden natuerlich noch andere folgen.
 
Zurück