Logo - MyWebsolution.de
User gesamt  :  2393947
User online  :  1
KubaSeoTräume, PHP Forum, PHP Community and more ... MyWebsolution.de!
   
   
 
Registrieren Login User F.A.Q Suche Home

eingeloggt bleiben

MyWebsolution.de Foren » Entwicklungsforum » einfache mysql klasse

Seite: 1 Posts pro Seite: 5 10 20
Autor Thread
20.01.2007 01:42 Uhr einfache mysql klasse
Negura
Forenposter
 
registriert 06.12.2006
wohnt in
Beiträge 57
PHP:
<?
/* Die Verbindungsklasse mit folgenden Methoden:
 1: createConnection($host, $user, $password, $database)
 2: disconnect()
 3: query($abfrage)
 4: fetch()
*/

class cConnection
{
 private 
$_connection    NULL;
 private 
$_resource    NULL;
 
 
// Stellt eine Verbindung zum Datenbankserver her
 
public function createConnection($hostname$username$password$database)
 {
  
$this->_connection = @mysql_connect($hostname$username$password); 
  if(
is_resource($this->_connection))
  {
   @
mysql_select_db($database$this->_connection);
  } 
  else
  {
   throw new 
Exception('Es konnte keine Verbindung hergestellt werden');
   unset(
$this->_connection);
  }
 }
 
 
// Schließt die Verbindung zum Datenbankserver
 
public function disconnect() 
 {
  if(
is_resource($this->_connection))
  {
   if(
mysql_close($this->_connection))
   {
    unset(
$this->_connection);
   }
   else
   {
    throw new 
Exception('Verbindung konnte nicht geschlossen werden');
   }
  }
 }
 
 
// Stellt eine Anfrage an den Server
 
public function query($query)
 {
  if(
is_resource($this->_connection) && is_string($query) && ($query != ""))
  {
   if(
is_resource($this->_resource))
   {
    
mysql_free_result($this->_resource);
   }
   
$result = @mysql_query($query$this->_connection);

   if(
is_resource($result))
   {
    
$this->_resource $result;
   }
   else
   {
    throw new 
Exception('Datenbankanfrage fehlgeschlagen!');
   }
  }
  else
  {
   throw new 
Exception('Bitte Parametertyp überprüfen');
  }
 }
 
 
// Verarbeitet das Ergebnisarray
 
public function fetch()
 {
  if(
is_resource($this->_resource))
  {
   
$row mysql_fetch_assoc($this->_resource);
 
   if(
is_array($row))
   {
    return 
$row;
   }
   else
   {
    throw new 
Exception('Resource konnte nicht verarbeitet werden');
   }
  }
 }

};
 
// Instanz erstellen
 
$Verbindung = new cConnection;

 
// Methoden aufrufen
 
try
 {
  
$Verbindung->createConnection("localhost""root""password""datenbank");
  
$Verbindung->query("SELECT * FROM tab_test");
  
$row $Verbindung->fetch();
  echo 
$row['SpaltenName'];
 }
 catch(
Exception $e// Geworfene Exceptions auswerten
 
{
  echo 
'<strong>Fehler: </strong>' $e->getMessage();
 }
?>
Profil ansehen
16.02.2007 14:33 Uhr
Negura
Forenposter
 
registriert 06.12.2006
wohnt in
Beiträge 57
Ein paar neue methode für die obige Klasse

PHP:

 // Diese Methode gibt die Anzahl der Datensätze in der Tabelle zurück
 public function getData($tablename)
 {
  if((is_string($tablename)) && ($tablename != ""))
  {
   $result = mysql_query("SELECT * FROM " . $tablename);
   
   if(is_resource($result))
   {
    return mysql_num_rows($result);
   }
   else
   {
    throw new Exception('Anfrage konnte nicht verarbeitet werden');
   }
  }
  else
  {
   throw new Exception('Falsche Parameterübergabe');
  }
 }

 // Diese Methode gibt alle Tabellen der aktuellen Datenbank zurück
 public function getTables()
 {
  $j = 0;
  $tables = array();
 
  $result = @mysql_list_tables($this->_database, $this->_connection);
  
  if(is_resource($result))
  {
   while($row = @mysql_fetch_array($result))
   {
    $tables[$j] = $row[0];
    $this->_table = $tables[$j];
    $j++;    
   }
   return $tables;
  }
  else
  {
   throw new Exception('Es konnten keine Tabellen gefunden werden, da keine Datenbank selektiert wurde.');
  }
 }
 
 // Diese Methiode gibt alle Felder eine Tabelle zurück
 public function getFields($tablename)
 {
  if(!$result = mysql_list_fields($this->_database, $tablename))
  {
   throw new Exception('Die Felder konnten nicht ermittelt werden.');;
  }
  else
  {     
   $cnt = 0;
   $fields = array();
  }

  if($field = mysql_num_fields($result))
  {
   for($j=0; $j < $field; $j++)
   {
    $fields[$cnt] = mysql_field_name($result, $cnt);
    $cnt++;
   }
  }
  else
  {
   throw new Exception('Die Anzahl der Felder konnte nicht ermittelt werden');
  }
  
  return $fields;
 }
 
 // Diese Methode ändert die Datenbank
 public function setDatabase($database)
 {
  if(isset($this->_connection))
  {
   if((is_string($database)) && ($database != ""))
   {
    if(mysql_select_db($database, $this->_connection))
    {
     $this->_database = $database;
    }
    else
    {
     throw new Exception('Die Datenbank konnte nicht ausgewählt werden');
    }    
   }
   else
   {
    throw new Exception('Es wurde eine ungültige Datenbankbezeichnung übergeben');
   }
  }
  else
  {
   throw new Exception('Es besteht keine Verbindung zum Server, bitte verwenden Sie "createConnection"');
  }
 }


Ein kleines Biespiel, was jedes Feld von jeder Tabelle der aktuellen Datenbank auflistet.
PHP:

 // Instanz erstellen
 $Verbindung = new cConnection;

 // Methoden aufrufen
 try
 {
  $Verbindung->createConnection("localhost", "root", "password", "datenbank");

  $tabs = $Verbindung->getTables();

  $x=0;
  do
  {
   echo "<b>Felder von Tabelle:</b> " . $tabs[$x] . ' (' . $Verbindung->getData($tabs[$x]) . ' Datensätze) <br />';
   
   $j=0;
   do
   {
    $field = $Verbindung->getFields($tabs[$x]);
    echo ' - <b>Feld:</b> ' . $field[$j] . '<br />';
    $j++;    
   }
   while($field[$j] != "");
   
   $x++;
  }
  while($tabs[$x] != "");
 }
 catch(Exception $e) // Geworfene Exceptions auswerten
 {
  echo '<strong>Fehler: </strong>' . $e->getMessage();
 }
Profil ansehen
13.02.2009 15:49 Uhr
Nuc
User
 
registriert 13.02.2009
wohnt in
Beiträge 6
Dieses Skript ist in der Praxis völlig untauglich....
Man könnte damit höchstens die Datenbankkapazität testen.....
Schau mal du hast eine Datenbank mit 20, 30 Tabellen und die Tablle die du auswähst hat wieder 20 Felder wenn jetzt 1000 Besucher auf die Seite kommen :rofl:
Dieses Skript verbraucht dermaßen viel Kapazität.
Mach es so:
Code:
			
	//Validiert den MySQL Query und führt ihn je nach Art aus
	//Param $query = string - Der auszuführende Query
	//Return = ? - Gibt die Returns von den Functionen weiter
	public function execute($query) {
		if(strtolower(substr($query,0,6)) == "select") return $this->select($query);
		elseif(strtolower(substr($query,0,6)) == "update") return $this->update($query);
		elseif(strtolower(substr($query,0,6)) == "insert") return $this->insert($query);
		elseif(strtolower(substr($query,0,6)) == "delete") return $this->delete($query);
		else $this->error("Unknown MySQL Query");
		}
//Führt einen MySQL Query aus
	//Param $query = string - Der auszuführende Query
	//Return = object - Das Result das die Datenbank zurückgibt
	public function query($query) {
		if(!mysql_ping($this->conn)) $this->error("CONNECTION LOST");
		$this->currquery = $query;
		$res = mysql_query($query) OR $this->error();
		return $res;
		}
			
	//Gibt das SELECT Result als array zurück
	//Param $query = string - Der auszuführende SELECT Query
	//Return = array - Die Antwort des MySQL Servers in Form eines arrays
	public function select($query) {
		$array = array();
		$result = $this->query($query);
		$anzahl = mysql_num_rows($result);
		if($anzahl) {
			while($row = mysql_fetch_array($result)) {
				$array[] = $row;
				}
			}
			return $array;
		}

und dann führe den Code so aus:
Code:
	$sql = "SELECT Feld, Feld, Feld FROM Tabelle"; ///NIE *
$arraysql = $GLOBALS['mysql']->execute($sql);
for($i=0;$i<count($arraysql);$i++) {
echo "{$arraysql[$i]['Feld']}";

So das geht aber nicht der Code ist nicht vollständig ist nur als Tipp
Profil ansehen Mail senden
04.05.2010 20:50 Uhr
Basi
User
 
registriert 03.05.2010
wohnt in Deutschland
Beiträge 6
Du kannst doch nicht in deiner connection Klasse auch schon die Datenbank anwählen, was wenn man später noch eine andere Datenbank anwählen muss? Dann muss man neu connecten, das müssen unbedingt 2 Methoden sein.
Profil ansehen
Seite: 1 no reply
Powered by Pascal Landau © 2006 MyWebsolution.de
Designed by Pascal Landau © 2006 MyWebsolution.de
 
 
 
 
Home Email Impressum Disclaimer Statistik