PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP Entwicklung und Softwaredesign (http://www.selfphp.de/forum/forumdisplay.php?f=14)
-   -   Erweiterte MYSQL_i Klasse (http://www.selfphp.de/forum/showthread.php?t=19215)

ksticker 21.04.2008 20:01:20

Erweiterte MYSQL_i Klasse
 
Hy hab mal eine kleine aber (hoffentlich) feine Klasse geschrieben, mit welche die Grundlegendsten SQL-Befehl enthält.

PHP-Code:

<?php
/* 

Dies ist eine Klasse für MYSQLi diese ermöglicht es 
schnelle und Benutzerfreundliche Anfragen an den Server zu schicken

*/
class mysql_i
    
{
        private 
$database;
        public    
$ausgabe;
        
        
/* Hilfefunktion der Klasse */
        
function help()
        {
            echo
'
                    <h1>Hilfe - mysql_i_Klasse</h1>
                    <table border="1" width="100%" cellpadding="0" cellspacing="0">
                        <colgroup>
                            <col width="200px">
                            <col width="*">
                        </colgroup>
                        <tr>
                            <td>Methode</td>
                            <td>Beschreibung</td>
                        </tr>
                        <tr>
                            <td>__construct</td>
                            <td>Stellt die Verbindung zum MYSQL- Server her.<br> Diese Methode wird automatisch aufgerufen</td>
                        </tr>
                        <tr>
                            <td>select</td>
                            <td>Führt einen MYSQL- Select- Befehl aus.<br> Bsp.: <b>$instanzname->select("Tabellenname","Spalte1 AS Spaltenalias, Spalte2","Bedingung")</b><br>Die Ausgabe steht nur bei diesem Befehl zur Verfügung</td>
                        </tr>
                        <tr>
                            <td>insert</td>
                            <td>Führt einen MYSQL- Insert- Befehl aus.<br> Bsp.: <b>$instanzname->insert("Tabellenname","Spalte1, Spalte2","`Inhalt1`,`Inhalt2`")</b></td>
                        </tr>        
                        <tr>
                            <td>update</td>
                            <td>Führt einen MYSQL- Update- Befehl aus.<br> Bsp.: <b>$instanzname->update("tabellenname", array("Spalte1" => "Inhalt1", "Spalte2" => "Inhalt2"))</b></td>
                        </tr>                            
                        <tr>
                            <td>delete</td>
                            <td>Führt einen MYSQL- Delete- Befehl aus.<br> Bsp.: <b>$instanzname->delete("Tabellenname","Bedingung")</b></td>
                        </tr>    
                        <tr>
                            <td>__destruct</td>
                            <td>Trennt die Datenbankverbindung</td>
                        </tr>                        
                    </table>
                '
;
        
        }
        
        
        function 
__construct()
        {        
            
// Verbindung mit der Datenbak herstellen
            
$this->datebase = new mysqli("####""####""####""####");
        }    

        function 
select($tablename,$cols "*",$where "1")
        {
            
/* SELECT ABFRAGE AUSFÜHREN */
            
$befehl $this->datebase->query("SELECT $cols FROM $tablename WHERE $where");
            return 
$befehl->fetch_object();
        }
        
        
/* FUNKTION ZUM SCHREIBEN EINES DATENSATZES */
        
function insert($tablename,$cols,$values)
        {
            
$this->datebase->query("INSERT INTO `$tablename` ($cols) VALUES ($values)");    
        }
        
        
/* FUNKTION ZUM ÄNDERN EINES DATENSATZES */
        
function update($tablename,$colsset)
        {
            if(
is_array($colsset) == true)
            {
            
$update_seq "";
            
$i 0;
            foreach(
$colsset AS $index => $value)
            {
                
$i++;
                if(
$i count($colsset))
                {
                    
$update_seq.= $index.' = `'.$value.'`, ';
                }else{
                    
$update_seq.= $index.' = `'.$value.'`';
                }
            }
            
$this->datebase->query("UPDATE $tablename SET $update_seq");
            }else{
            echo 
'<h2>Ihr Update- Befehl ist fehlerhaft, bitte lesen Sie in der Hilfe nach, wie der Updatebefehl formuliert wird!</h2>';
            
$this->help();
            }
        }
        
        
/* FUNKTION ZUM LÖSCHEN DER DATENSÄTZE */
        
function delete($tablename FALSE$where FALSE)
        {
            if((
$tablename != FALSE) && (($where != FALSE)))
            {
                
$this->datebase->query("DELETE FR4OM $tablename WHERE $where");
            }elseif((
$tablename == FALSE) && (($where != FALSE))){
                
/* Fehlerausgabe, wenn kein Tabellenname angegeben wurde */
                
echo 'Sie haben keinen Tabellennamen eingegeben, bitte geben Sie einen Tabellennamen ein!';
            }elseif((
$tablename != FALSE) && (($where == FALSE))){
                
/* Fehlerausgabe, wenn kein WHERE angegeben wurde */
                
echo 'Sie haben keine WHERE- Bedingung angegeben (das Löschen alle Datensätze wurde verhindert), bitte geben Sie eine WHERE- Bedingung an!';
            }else{
                
/* Wenn nichts angegeben wurde dann Fehler */
                
echo 'Bitte geben Sie die Notwendigen Parameter an ("Tabellenname","WHERE- Bedingung")!'
            }
        }
        
        function 
__destruct()
        {
            
// Datenbankverbindung trennen
            
$this->datebase->Close();
        }
    }
?>


Diese Klasse soll einem die Syntax ein wenig abnehmen.

Die Klasse funktioniert nur unter:
- PHP5
- MYSQLi erweiterung

Socrates 21.04.2008 22:35:41

AW: Erweiterte MYSQL_i Klasse
 
Abend!
Meiner Meinung nach ist diese Klasse überhaupt nicht sinnvoll. Nicht nur, dass mysqli so oder so schon eine objektorientierte Syntax besitzt, es ist auch noch komplizierter als zuvor. Man muss erst in der Klasse rumpfuschen, bevor man zum MySQL-Server verbinden kann. Eine solche Klasse macht nur dann Sinn, wenn man noch mysql und nicht mysqli-Funktionen benutzt. Und selbst dann sollte die Klasse vollkommen anders aufgebaut sein und eine Methode wie help() hat da nichts zu suchen.
MfG, Andy

PS: Eine richtige Datenbank-Klasse hätte ungefähr die Syntax, die MySQLi so oder so schon hat.

ksticker 21.04.2008 22:40:31

AW: Erweiterte MYSQL_i Klasse
 
Gibt es denn in Mysqli solche befehle wie $instanzname->insert("blablabla");?

Socrates 21.04.2008 22:51:55

AW: Erweiterte MYSQL_i Klasse
 
Gibt es alles.
PHP-Code:

<?php
     
// create object
     
@db = new mysqli("localhost""root""""test");

     if(
mysqli_connect_errno())
     {
          echo 
"Connection failed!";
          exit();
     }

     
// run db-query
     
if( $cmd $db->query("SELECT * FROM tabletest") )
     {
          
// get response
          
while ( $reply $cmd->fetch_object() )
          {
               
// print out reply
               
echo {$reply};
          }

          
$cmd->close();
     }
     
     else
     {
          echo 
"No data found!";
     }

     
// close connection
     
$db->close();
?>


ksticker 21.04.2008 22:59:20

AW: Erweiterte MYSQL_i Klasse
 
Ne ich meine das so $cmd = $db->insert("Spalte1","Inhalt1")

Socrates 21.04.2008 23:28:20

AW: Erweiterte MYSQL_i Klasse
 
Nein das gibt es nicht. Das macht ja auch keinen Sinn, da man bei dieser Methode ja keine weiteren Optionen hinzufügen kann. Wie fragst du zum Beispiel Datensätze ab, die ein bestimmtes Datum haben. Oder wie sortierst du diese Datensätze?
MfG, Andy

ksticker 21.04.2008 23:43:48

AW: Erweiterte MYSQL_i Klasse
 
so:

PHP-Code:

        function select($tablename,$cols "*",$where "1"
        { 
            
/* SELECT ABFRAGE AUSFÜHREN */ 
            
$befehl $this->datebase->query("SELECT $cols FROM $tablename WHERE $where"); 
            return 
$befehl->fetch_object(); 
        } 


Socrates 22.04.2008 02:44:40

AW: Erweiterte MYSQL_i Klasse
 
Diese Methode, diese ganze Klasse macht einfach keinen Sinn. Wenn es die Arbeit wirklich erleichtern würde, aber das tut es nicht. MySQL bietet so viele Möglichkeiten und du beschneidest sie nur durch diese Klasse.
MfG, Andy

defabricator 25.04.2008 14:08:50

AW: Erweiterte MYSQL_i Klasse
 
Sehe ich genauso. Wenn Du Deine Klasse wenigstens von mysqli abgeleitet hättest, wären die Funktionen nur selten von Nutzen. So ist die Klasse leider unbrauchbar.
Schau Dir mysqli oder PDO an. Oder wenn Du darüber hinaus gehen willst, beschäftige Dich mit Abstraktionsschichten oder object relational mapping (orm).


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:38:58 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.