2Danke
ERLEDIGT
JA
JA
ANTWORTEN
5
5
ZUGRIFFE
331
331
EMPFEHLEN
-
11.12.11 14:57 #1
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.
....
}
-
11.12.11 15:16 #2
- 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.Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
11.12.11 15:25 #3
Ok Vielen Dank
-
11.12.11 18:45 #4
- 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 ;-)
-
12.12.11 12:05 #5
Eine Klasse ähnlich wie hier:
http://www.tsql.de/php/mysql_php_klasse
hab meinen Code gerade nicht zur Hand
-
12.12.11 12:19 #6
- 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
-
Wert in dem global Variable speichern
Von Pyata im Forum C/C++Antworten: 0Letzter Beitrag: 11.05.07, 14:52 -
Übergabe einer Variable und Variable=global?
Von Master Flexi im Forum PHPAntworten: 16Letzter Beitrag: 11.04.07, 13:19 -
Variable global setzen...
Von BigDundee im Forum .NET ArchivAntworten: 2Letzter Beitrag: 29.09.04, 21:34 -
variable global setzen
Von psycotis im Forum PHPAntworten: 7Letzter Beitrag: 13.05.04, 20:38 -
JavaScript - Function global Variable
Von René Paschold im Forum Javascript & AjaxAntworten: 9Letzter Beitrag: 19.09.02, 12:40





Zitieren

Login






[PHP][Snippet] Array zu XML konvertieren