kostenloser Webspace werbefrei: lima-city


PHP MySQL Datenconnect möglichst OOP.

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    matt3o12

    matt3o12 hat kostenlosen Webspace.

    Hallo, ich bin jetzt bei den Teil meiner Webseite angelangt, wie und ob ich ein MySQL Datenbank connect mache. Früher habe ich mir deswegen keine Getanen gemacht und immer eine neue Verbindung geöffnet und mir einfach, ohne mir Gedanken da rum zu machen, die Werte geladen.
    Bis jetzt sieht mein Entwurfsplan so aus:
    <?php
    /**
     * Using Singleton pattern
     *
     * @package default
     * @author Matteo Kloiber
     */
    class MySQLConnect(){
    	private function __construct();
    	public function getInstance();
    	public function getCount($SQLquery);
    	public function getString($SQLquery);
    }
    ?>

    Ich habe mich für das Singleton Entwurfsmuster entschieden, da ich nicht immer eine neue Verbindung aufbauen will. Nur wie bekomme ich am besten die Werte raus? Ich meine manchmal braucht man einen Count, manchmal einen String, und was noch nicht alles... Eine Array?
    Deshalb wollte ich euch fragen, wie ihr das gemacht habt. Ich will ungern für Klassen die auf die Datenbank zu greifen müssen, jeweils eine neue Datenbank Verbindung machen. Also zb:
    <?php
    class User{
    	function __construct($inUserID, $inCreate) {
    		mysql_connect("localhost","Benutzername","Passwort");
    		mysql_select_db("Project");
    		
    		//Wenn create true, erstelle user. Sonst:
    		$query = "SELECT * FROM User WHERE id = '" . $inUserID . "';";
    		$user = mysql_query($query);
    		
    		//Mache tolle sachen mit $user
    	}
    	
    	//Weiter Methoden
    }
    ?>
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. g****e

    Also eine einfache Methode wäre ein Wrapper als Static Class zu schreiben. Static ist überall verfügbar, und so kann man das durchaus einfach überall benutzen, also so zb:
    class mysql {
      public static function connect() {
        //do connect
      }
      public static function query($sql) {
        //do query
      }
      ....
    }


    Dann sagste am Anfang deines Scriptes einfach mysql::connect(); und er verbindet, und dannach jeweils immer nur mysql::query(), denn da greifst du jetzt immer auf die gleiche connection zu.

    Du kannst auch einen Pointer erstellen. Sprich so:

    class pMySQL {
    protected static $con =NULL;
    public static function get() { return $con; }
    public static function create() { self::$con = new mysql(); }
    }
    
    class mysql {
    //deine mysql klasse
    }
    
    pMySQL::get()->query( 'select ... ');


    So könntest du über den Pointer auch überall darauf zugreifen.

    Du kannst auch das signeltonpattern nutzen wie du es wolltest:
    class mysql {
    protected static $instatnz = NULL
    public static function getInstanz() {
      if (self::$instanz === NULL) {
        self::$instanz = new self();
      }
      return self::$instanz;
    }
    protected function __construct() {}
    //rest der klasse
    
    class user() {
    
    protected $mysql = NULL;
    
    public function __construct() {
      $this->mysql = mysql::getInstanz();
    }
    
    }


    würde auch gehen. Ich wette da gibt es noch weit mehr Methoden. Such dir eine Aus ;-)

    Liebe Grüße

    Beitrag zuletzt geändert: 9.3.2012 12:00:02 von ggamee
  4. Autor dieses Themas

    matt3o12

    matt3o12 hat kostenlosen Webspace.

    So danke, ich habe es so gemacht:
    <?php
    include_once 'classes/Config.class.php';
    
    class MySQLConnect{
    	private static $instance;
    	
    	private $connect;
    	private $config;
    	
    	private function __construct() {
    		$this->config = Config::getInstance();
    		$this->connect = mysql_connect($this->config->getValue("mysql_host"), 
    						 $this->config->getValue("mysql_user"), $this->config->getValue("mysql_passwd"));
    		mysql_select_db($this->config->getValue("mysql_db", $this->connect));
    		
    		print mysql_error();
    	}
    	
    	public static function getInstance()
    	{
    		if ($instance == null)
    			$instance = new self();
    			
    		return $instance;
    	}
    	
    	public function query($sql)
    	{
    		return mysql_query($sql, $this->connect);
    	}
    }
    ?>


    Nur ich habe noch eine kleine Frage. Ich versuche ein Default-prfix zu machen. (Der kann ich den Config gesetzt werden). Nur ich will nicht immer in dem Script:
    include_once 'classes/Config.class.php' machen um anschließend das schreiben zu müssen:
    $sql = "SELECT * FROM " . Config::getInstance()->getValue("mysql_prefix") . "test";
    Kann ich nicht irgendwie einen Default Präfix Konfigurieren?
    Ich kann es natürlich auch mit einen regex durchlaufen lassen, nur könnte es nicht passieren, dass es zu viele "befehle" (wie SELECT, UPDATE, etc) gibt?
  5. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!