tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 2 Beitrag von saftmeister
ERLEDIGT
JA
ANTWORTEN
5
ZUGRIFFE
331
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Starfox2007
    Starfox2007 Starfox2007 ist offline Mitglied Silber
    Registriert seit
    Apr 2010
    Beiträge
    87
    Hi zusammen,

    Ich hab heute eigentlich nur eine kurze Sicherheitsfrage.

    wenn ich in eine Funktion den MysqlDatenbankzugriff Global importiere wie sicher ist das ?

    PHP-Code:
    function ($test) {

    global 
    $db// $db ist der Datenbankzugriff steht auch in einer function bei mir.

    ....


     } 
     

  2. #2
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.521
    So sicher, wie das du dir sicher bist, das $db von keiner anderen Stelle im Code überschrieben wird. Das bedeutet, einmal initalisieren.

    Besser wäre es jedoch, wenn du den Datenbank-Zugriff in ein Singleton-Pattern kapselst. Dann bist du dir sicher, das er nie überschrieben werden kann.
    Starfox2007 und Miami Beach bedanken sich. 
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  3. #3
    Avatar von Starfox2007
    Starfox2007 Starfox2007 ist offline Mitglied Silber
    Registriert seit
    Apr 2010
    Beiträge
    87
    Ok Vielen Dank
     

  4. #4
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.521
    Was ist $db eigentlich? Eine Ressource-Kennung? Ein Objekt (Klassen-Instanz)?
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  5. #5
    Avatar von Starfox2007
    Starfox2007 Starfox2007 ist offline Mitglied Silber
    Registriert seit
    Apr 2010
    Beiträge
    87
    Eine Klasse ähnlich wie hier:

    http://www.tsql.de/php/mysql_php_klasse

    hab meinen Code gerade nicht zur Hand
     

  6. #6
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.521
    OK, nehmen wir die als Beispiel. Wie schon gesagt, kannst du ein Singleton-Pattern benutzen. Das geht so:

    1. Der Constructor der Klasse ist mindestens protected (besser private)
    2. Es gibt eine statische Member-Variable
    3. Es gibt eine statische Public-Methode, die getInstance() heißt und immer eine Instanz von der Klasse zurück gibt. Ist noch keine Instanz vorhanden, wird sie erzeugt.

    Das sieht dann so im Code aus:

    Code php:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    
    class DB_MySQL {
      private $connection = NULL;
      private $result = NULL;
      private $counter=NULL;
     
      // Unsere private statische Member-Variable für die Instanz
      private static $instance;
     
      // Wir machen den Constructor private
      private function __construct($host=NULL, $database=NULL, $user=NULL, $pass=NULL){
        $this->connection = mysql_connect($host,$user,$pass,TRUE);
        mysql_select_db($database, $this->connection);
      }
     
      // Wir bauen unsere getInstance()-Methode:
      public static function getInstance()
      {
        if(!self::$instance)
        {
          // Hier steht noch ein bisschen Arbeit an - Variablen reinholen z.B. über einen statischen setter
          self::$instance = new self($host, $database, $user, $pass);
        }
     
        return self::$instance;
      }
     
      public function disconnect() {
        if (is_resource($this->connection))             
            mysql_close($this->connection);
      }
     
      public function query($query) {
        $this->result=mysql_query($query,$this->connection);
        $this->counter=NULL;
      }
     
      public function fetchRow() {
        return mysql_fetch_assoc($this->result);
      }
     
      public function count() {
        if($this->counter==NULL && is_resource($this->result)) {
            $this->counter=mysql_num_rows($this->result);
        }
     
        return $this->counter;
      }
    }

    Jetzt fragst du dich vielleicht, was das soll? Nunja, niemand außer der Klasse selbst kann eine Instanz erzeugen, und du hast auch immer die gleiche Instanz (Singleton). Da die getInstance()-Methode statisch ist, kannst du sie von überall aus aufrufen. Z.B. in einer Funktion wie dieser:

    Code php:
    1
    2
    3
    4
    5
    6
    7
    8
    
    function getUser($username)
    {
      DB_MySQL::getInstance()->query("SELECT * FROM users WHERE username = '$username'");
      while($assocResult = DB_MySQL::getInstance()->fetchRow())
      {
        var_dump($assocResult);
      }
    }

    Du kannst es auch etwas übersichtlicher haben:

    Code php:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    function getUser($username)
    {
      $db = DB_MySQL::getInstance();
      $db->query("SELECT * FROM users WHERE username = '$username'");
      while($assocResult = $db->fetchRow())
      {
        var_dump($assocResult);
      }
    }

    Fragen?
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

Ähnliche Themen

  1. Wert in dem global Variable speichern
    Von Pyata im Forum C/C++
    Antworten: 0
    Letzter Beitrag: 11.05.07, 14:52
  2. Übergabe einer Variable und Variable=global?
    Von Master Flexi im Forum PHP
    Antworten: 16
    Letzter Beitrag: 11.04.07, 13:19
  3. Variable global setzen...
    Von BigDundee im Forum .NET Archiv
    Antworten: 2
    Letzter Beitrag: 29.09.04, 21:34
  4. variable global setzen
    Von psycotis im Forum PHP
    Antworten: 7
    Letzter Beitrag: 13.05.04, 20:38
  5. JavaScript - Function global Variable
    Von René Paschold im Forum Javascript & Ajax
    Antworten: 9
    Letzter Beitrag: 19.09.02, 12:40