# [PHP][MYSQL] MySQL-Klasse



## bertiSR (15. Oktober 2006)

Hallo ich habe mir mal eine kleine MySQL-Klasse gesucht, weiß aber nicht, wie man mit der umgeht. Also
1. Wo muss ich die Datenbank-Verbindung herstellen und
2. Wie kann ich dann letztendlich auch Datensätze aus der Datenbank ausgeben lassen?

Hier die Klasse:

```
<?php
/**
 * @name       mysql.class.php
 * @author     Patrick Jobst <taldoras@hotmail.com>
 * @copyright  2006-2007 Wirtschaftsprojekt JTG
 * @desc       MySQL Klasse
 * @param      string $_sql SQL String
 * @param      int $_result
 * @param      int $_errno
 * @param      string $_error
 */

class Query
{
    var $_sql    = '';
    var $_result = 0;
    var $_errno  = 0;
    var $_error  = '';
  
    /**
   * @author     Patrick Jobst <taldoras@hotmail.com>
   * @copyright  2006-2007 Wirtschaftsprojekt JTG
   * @desc       Führt einen Query durch
   * @param      string $sql SQL String
   */
    function query($sql)
    {
        //SQL Kommando in der Klasse speichern
        $this->_sql = trim($sql);
        //Query schicken
        $this->_result = @mysql_query($this->_sql);
        //schauen ob ein Fehler aufgetaucht ist
        if (!isset($this_result) || !$this_result) {
            //Ein Fehler ist passiert
            //MySQL Fehler Nummer und Fehler Meldung speichern
            $this->_errno = mysql_errno();
            $this->_error = mysql_error();
            //Fehler ausgeben
            $this->getError();
        }
    }
    /**
   * @author     Patrick Jobst <taldoras@hotmail.com>
   * @copyright  2006-2007 Wirtschaftsprojekt JTG
   * @desc       Liefert einen Fehler zurück
   * @return     string $tmp Fehler
   */
    function error()
    {
        //Result ID in einer temporären Variable speichern
        $tmp = isset($this->_result) ? $this->_result : '';
        //Zu Boolean konvertieren
        $tmp = (bool)$tmp;
        //invertieren
        $tmp = !$tmp;
        //und zurueckgeben
        return $tmp;
    }
    /**
   * @author     Patrick Jobst <taldoras@hotmail.com>
   * @copyright  2006-2007 Wirtschaftsprojekt JTG
   * @desc       Prüft, ob Fehler vorhanden sind
   * @return     boolean Fehler vorhanden? True/False
   */
    function getError()
    {
        //Schauen ob ein Fehler vorgekommen ist
        if ($this->error()) {
            //Fehler formulieren
            print 'MySQL has detected the error #'.$this->_errno.':</p>';         
            print 'Query';
            print entities($this->_sql);
            print 'Answer';
            print entities($this->_error);
            die();
            //"true" zurueckgeben, ein Fehler ist vorgekommen.
            return true;
        } else {
            //"false" zurueckgeben, alles ist in Ordnung.
            return false;
        }
    }
    /**
   * @author     Patrick Jobst <taldoras@hotmail.com>
   * @copyright  2006-2007 Wirtschaftsprojekt JTG
   * @desc       Hole Daten aus Table
   * @return     array MySQL-Results
   */
    function fetch()
    {
        //Schauen ob ein Fehler existiert
        if ($this->error()) {
            //Irgendetwas ist schief gelaufen, nicht die "fetch" Funktion ausfuehren sondern "null" zurueckgeben
            return null;
        } else {
            //"fetch" Funktion ausfuehren
            return mysql_fetch_assoc($this->_result);
        }
    }
    /**
   * @author     Patrick Jobst <taldoras@hotmail.com>
   * @copyright  2006-2007 Wirtschaftsprojekt JTG
   * @desc       Überprüfung der Spaltenanzahl
   * @return     int Spaltenanzahl
   */
    function numRows()
    {
        //schauen ob ein Fehler aufgetreten ist
        if ($this->error()) {
            //Fehler, -1 zurueckgeben (-1 Zeilen)
            return -1;
        } else {
            //Anzahl der Spalten im Ergebnis ("result") zurueckgeben
            return mysql_num_rows($this->_result);
        }
    }
    /**
   * @author     Patrick Jobst <taldoras@hotmail.com>
   * @copyright  2006-2007 Wirtschaftsprojekt JTG
   * @desc       Lässt das Ergebnis frei
   * @return     boolean Result
   */
    function free()
    {
        //schauen ob ein Fehler aufgetreten ist
        if ($this->error()) {
            //Fehler, "false" zurueckgeben
            return false;
        } else {
            //Ergebnis "frei lassen"
            if (@mysql_free_result($this->_result)) {
                //"true" zurueckgeben, Ergebnis wurde freigelassen
                return true;
            } else {
                //Fehler trat auf
                return false;
            }
        }
    }
}
?>
```

Mfg. Berti


----------



## Flex (15. Oktober 2006)

Ich würde dir raten, eine andere Klasse zu suchen, da diese veraltet ist und auf Funktionen zurückgreift, die es nicht mehr gibt.( entities() z. B.)

Weiterhin hat diese Klasse keine Funktion für mysql_connect und für das Auswählen der Datenbank, so das dies weiterhin manuell gemacht werden müsste.
Es gibt meiner Meinung nach bessere Klassen dafür.
Schau doch mal auf phpclasses.org vorbei.


----------



## BehindTheScenes (15. Oktober 2006)

ich kann dir meine CLasse geben::


```
<?php
/*
::::::::::::: Copyrights ::::::::::::::::::::::::::::::::::.
::::::	Codet by Denys Koch - 32657 Lemgo :::::::::::::::::.
::  Sintima ® Web Service Development                    ::
::  Sintima Germany Dmtirijus Fajeras - 19063 Schwerin   ::
::  - all rights reserved - alle Rechte vorbehalen -     ::.
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::.
*/
class sql
{
//::::: variables :::::
	var $connection;
	var $query;
	var $result;
//::::: edit here the value : 1 = show errors on the site; 0 = show errors only in the source-code :::::
	var $show_errors = 1;

//::::: Konstructor :::::
	function sql($host, $user, $passwd, $db)
	{
		$this->connect($host, $user, $passwd, $db);
	}
//::::: Connect :::::
	function connect($host, $user, $passwd, $db)
	{
		@$this->connection = mysql_connect($host, $user, $passwd);
		if ($this->connection)
		{
			$this->sel_db($db);
		}
		else 
		{
        	$this->make_error(2, "Can not connect the MySQL server!", mysql_errno(), mysql_error());
		}
	}
//::::: Select database :::::
	function sel_db($db)
	{
		if (@!mysql_select_db($db, $this->connection))
		{
			$this->make_error(2, "Can not select ".$db, mysql_errno($this->connection), mysql_error($this->connection));
		}
	}
//::::: query :::::
	function query($str, $get = 0)
	{
		if(@!$this->query = mysql_query($str, $this->connection))
		{
			$this->make_error(2, "Can not query: ".$str, mysql_errno($this->connection), mysql_error($this->connection));
        }
        else
        {
        	if($get == 1)
        	{
            	return $this->query;
			}
		}
	}
//::::: fetch object :::::
	function fetch_obj($query = 0)
	{
		if ($query == 0)
		{
			if (@$this->result = mysql_fetch_object($this->query))
			{
				return $this->result;
			}
		}
		else
		{
			if (@$this->result = mysql_fetch_object($query))
			{
				return $this->result;
			}
		}
	}
	
//::::: num_rows ::::::
	function num_rows($query = 0)
	{
		if ($query == 0)
		{
			if (@$this->result = mysql_num_rows($this->query))
			{
				return $this->result;
			}
		}
		else
		{
			if (@$this->result = mysql_num_rows($query))
			{
				return $this->result;
			}
		}
	}
//::::: Error function :::::
	function make_error($mode, $desc, $errno, $error)
	{
		/*::::: error modes :
			1 = Light Error
			2 = Critical Error
		:::::*/
		switch($mode)
		{
			case 1:
				$mod = "Light Error :"; break;
			case 2:
				$mod = "Critical Error :"; break;
			default:
				$mod = "Error :"; break;
        }
		if ($this->show_errors == 1)
		{
			$err_msg = "<span style=\"color: #FF0000; font-weight: bold; font-size: 14pt;\">".$mod."</span><br />";
			$err_msg .= "Description: <b>".$desc."</b><br />";
			$err_msg .= "MySQL error nummer: <b>".$errno."</b><br />";
			$err_msg .= "MySQL error description: <b>".$error."</b><br />";
			$err_msg .= "Time: <b>".date("d.m.y :: H:i:s")."</b<br />";
			$err_msg .= "<b>Please contact the Administrator! :: Bitte wenden Sie sich an den Administrator!<br /><a href=\"mailto: admin@sintima.de".$admin_mail."\">.:Administrator:.</a></b><br />";
			die ($err_msg);
		}
		elseif ($this->show_errors == 0)
		{
			$err_msg = $mod."\n";
			$err_msg .= "Description: ".$desc."\n";
			$err_msg .= "MySQL error nummer: ".$errno."\n";
			$err_msg .= "MySQL error description: ".$error."\n";
			$err_msg .= "Time: ".date("d.m.y :: H:i:s")."\n";
			$err_msg .= "Please contact the Administrator! :: Bitte wenden Sie sich an den Administrator! admin@sintima.de \n";
			die ("<!--".$err_msg."//-->");
        }
    }
}
?>
```

Futures:
1. Debuger mit bei
2. Error ausgabe ist abschaltbar
3. einfache benutzung 

```
$sql = new sql("localhost", "username", "password", "datenbank");
```
hier mal ein Beispiel:
(index.php von http://www.be-free-and-jump.com)

```
<?php
/*
::::::::::::: Copyrights ::::::::::::::::::::::::::::::::::.
::::::	Codet by Denys Koch - 32657 Lemgo :::::::::::::::::.
::  Sintima ® Web Service Development                    ::
::  Sintima Germany Dmtirijus Fajeras - 19063 Schwerin   ::
::  - all rights reserved - alle Rechte vorbehalen -     ::.
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::.
*/
include("inc/main.php");

$data['[title]'] = "Startseite";
$db->query("SELECT `content` FROM `pages` WHERE `page`='home'");
$row = $db->fetch_obj();
$data['[content]'] = $row->content;

$tpl->parse_tpl($data, $tpl->get_tpl("main"), 1);
?>
```

in der main.php wird halt mysql_class.inc.php includet und meine template Klasse

MfG BehindTheScenes


----------



## bertiSR (17. Oktober 2006)

Hi noch eine Kurze Frage, wie muss ich deine Klasse erweitern um auch ein mysql_fetch_assoc ausgeben lassen zu können?


----------



## tobee (17. Oktober 2006)

```
//::::: fetch assoc ::::: 
    function fetch_assoc($query = 0) 
    { 
        if ($query == 0) 
        { 
            if (@$this->result = mysql_fetch_assoc($this->query)) 
            { 
                return $this->result; 
            } 
        } 
        else 
        { 
            if (@$this->result = mysql_fetch_assoc($query)) 
            { 
                return $this->result; 
            } 
        } 
    }
```


----------

