Du bist nicht angemeldet.

JuKu

Profi

  • »JuKu« ist der Autor dieses Themas

Beiträge: 574

Registrierungsdatum: 29.09.2011

Danksagungen: 48

  • Private Nachricht senden

1

06.10.2011, 15:29

3. Die Datenbank-Klasse

Damit nicht immer die Datenbank-Verbindung neu erstellen müssen, erstellen wir jetzt eine Datenbank-Klasse.
Die Datei db.php, die diese Klasse enthält, ist im Ordner CMS/classes.

db.php:

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php

class MySqlDatabase {

        private $host "localhost";//Host
        private $benutzer "root";//Benutzername
        private $passwort "passwort";
        private $datenbank "datenbank";
        public $db_link;

        public function verbinden () {

                $this->db_link mysql_connect($this->host$this->benutzer$this->passwort) or die("Anfrage fehlgeschlagen.");

        mysql_select_db($this->datenbank) or die("Die datenbank konnte nicht ausgew&auml;hlt werden.");

        }

}

?>


Viel zu sagen gibt es hier eig. nicht.
Es gibt erst eine Funktion, die Funktion verbinden, die eine Verbindung zur MYSQL-Datenbank herstellt und die richtige Datenbank auswählt.

index.php:

PHP-Quelltext

1
2
3
4
5
6
7
8
<?php

require("CMS/classes/db.php");//Hinweis: Ihr könnt die Klammern auch weglassen, nähere Infos gibt es bei Simon^^ (http://www.developertalk.de/user/2-simon/ )

$db = new MySqlDatabase();
$db->verbinden();

?>


Mit $db = new MySqlDatabase(); erzeuegn wir ein Object der Klasse MySqlDatabase.
Mittels $db->verbinden(); stellen wir eine Verbindung zur MYSQL-Datenbank her.

Hinweis: Im Dateianhang findet ihr den aktuellen Stand.
»JuKu« hat folgende Datei angehängt:
  • Stand_3.zip (1,81 kB - 211 mal heruntergeladen - zuletzt: Gestern, 05:44)
Wenn euch mein Beitrag weitergeholfen hat, drückt auf "Bedanken"!
Danke! :D

Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von »JuKu« (06.10.2011, 16:42)


Simon

Profi

Beiträge: 725

Registrierungsdatum: 14.06.2011

Danksagungen: 210

  • Private Nachricht senden

2

06.10.2011, 15:45

Hey,
ich würde die Klasse nicht komplett kleinschreiben.
Sondern eher Db.
Besser wäre aber Database oder sogar MySqlDatabase ;)

Ansonsten: Die Settings würde ich nicht innerhalb der Klasse festlegen, sondern innerhalb einer Configdatei.
Und natürlich darauf achten, dass die Variablen die richtige Öffentlichkeit haben ;)

JuKu

Profi

  • »JuKu« ist der Autor dieses Themas

Beiträge: 574

Registrierungsdatum: 29.09.2011

Danksagungen: 48

  • Private Nachricht senden

3

06.10.2011, 15:55

Danke für den Tipp!
Zu den Variablen: Die werden später aus einer .ini-datei gelesen und gesetzt.
Wenn euch mein Beitrag weitergeholfen hat, drückt auf "Bedanken"!
Danke! :D

Erik

Profi

Beiträge: 1 274

Registrierungsdatum: 22.06.2011

Wohnort: Deutschland ;)

Danksagungen: 307

  • Private Nachricht senden

4

06.10.2011, 16:25

Hmm ich hab mich bei meiner Seite dagegen entschieden, weil mir das Parsen zuviel Aufwand ist, also Performance mäßig, vom Programmieren ists ja einfach.

Ich persönlich würde CamelCase (also vorne klein, kp ob des anders heißt) für Variablennamen benutzen. Ist vielleicht in PHP nicht ganz so üblich :D Naja, deine entscheidung.

Einrückungen? >.<

Zitat

//Host
//Benutzername

Bisschen Sinnlos, die Kommentare ;)
Ich würd die Variablen aber sowiso englisch benennen...

Was ist, wenn man mehrere Datenbanken von einem Host brauch?

Okay, nochwas, ich kenn mich mit MVC ehrlich gesagt nicht besonders gut aus, aber was ist, wenn man ein anders Datenbanksystem als MySql hat, oder sogar mehrere verschiedene? Könnte man vielleicht einfach von einer Abstrakten DB-Klasse ableiten?

LG Erik
Beste Webite im Internet ( ͡° ͜ʖ ͡°)
xinra.de

JuKu

Profi

  • »JuKu« ist der Autor dieses Themas

Beiträge: 574

Registrierungsdatum: 29.09.2011

Danksagungen: 48

  • Private Nachricht senden

5

06.10.2011, 16:35

Hallo Erik,

sehr gute Idee! (das mit dem Ableiten und so)
Aber das kommt später.
ich werde versuchen, es so zu machen.
Aber vorerst ist MYSQL die Voraussetzung.
Aber es wird von vornherein schon so programmiert, das man das später leicht ändern kann. ;)
@CamelCase: Naja, so üblich ist es nicht. Aber ich werde mal schauen. ;)
Wenn euch mein Beitrag weitergeholfen hat, drückt auf "Bedanken"!
Danke! :D

Simon

Profi

Beiträge: 725

Registrierungsdatum: 14.06.2011

Danksagungen: 210

  • Private Nachricht senden

6

06.10.2011, 16:40

Also bezüglich CamelCase:
Ich nutze es :D

Erik

Profi

Beiträge: 1 274

Registrierungsdatum: 22.06.2011

Wohnort: Deutschland ;)

Danksagungen: 307

  • Private Nachricht senden

7

06.10.2011, 16:46

Ich auch.
Aber leider sind die Funktionen, die in PHP eingebaut sind auch mit so komischen Unterstrichen...

EDIT: Vielleicht solltest du damit anfangen, wo der Rest drauf aufbaut und erst etwas machen und später irgendwann man das, wo das erste drauf Aufbaut. Du musst hinterher ja jede einzelne Klasse nochmal ändern, und das ist gerade in dem Tutorial ziemlich blöd. Ich würde eher mit den Preferences anfangen, denn deine MySQL Klasse baut zum Beispiel schon darauf auf (Oder besser gesagt soll es, weil die gibts ja noch nicht).
Beste Webite im Internet ( ͡° ͜ʖ ͡°)
xinra.de

JuKu

Profi

  • »JuKu« ist der Autor dieses Themas

Beiträge: 574

Registrierungsdatum: 29.09.2011

Danksagungen: 48

  • Private Nachricht senden

8

06.10.2011, 16:59

Ich bin noch dabei, zu überlegen, wie ich das am besten mache. ;)
Aber im Tutorial selbst gebe ich erst einmal nur MYSQL-Anweisungen an, wenn eine Tabelle erstellt werden soll.
Wenn euch mein Beitrag weitergeholfen hat, drückt auf "Bedanken"!
Danke! :D

tom

Schüler

Beiträge: 54

Registrierungsdatum: 20.06.2011

Danksagungen: 18

  • Private Nachricht senden

9

06.10.2011, 17:16

- Wie wärs, wenn du Exception-Klassen nutzt?
- Warum ist der db_link public?
- UTF-8 sollte genutzt werden
- Zu den Problem mit den verschiedenen Datenbank-Systemen: Man kann die Klasse schon MySqlDatabase / MySqlDriver etc. nennen, jedoch sollte eine Proxy-Klasse "Database" angelegt werden, welche auf die MySqlDatabase-Klasseninstanz $driver delegiert. Die MySqlDatabase und Database - Klassen müssen dabei DatabaseInterface implementieren.
- Was ist mit den anderen Datenbankspezifischen Funktionen wie query() und fetch() ?
- Die PHP-Dateien würde ich immer so benennen, wie die Klasse heißt. z.b. "Database.php"
- Die Konfiguration würde ich in ein assoziatives Array packen.

Dieser Beitrag wurde bereits 8 mal editiert, zuletzt von »tom« (06.10.2011, 17:40)


JuKu

Profi

  • »JuKu« ist der Autor dieses Themas

Beiträge: 574

Registrierungsdatum: 29.09.2011

Danksagungen: 48

  • Private Nachricht senden

10

06.10.2011, 17:42

- Wie wärs, wenn du Exception-Klassen nutzt?
- Warum ist der db_link public?
- UTF-8 sollte genutzt werden
- Zu den Problem mit den verschiedenen Datenbank-Systemen: Man kann die Klasse schon MySqlDatabase / MySqlDriver etc. nennen, jedoch sollte eine Proxy-Klasse "Database" angelegt werden, welche auf die MySqlDatabase-Klasseninstanz $driver delegiert. Die MySqlDatabase und Database - Klassen müssen dabei DatabaseInterface implementieren.
- Was ist mit den anderen Datenbankspezifischen Funktionen wie query() und fetch() ?
- Die PHP-Dateien würde ich immer so benennen, wie die Klasse heißt. z.b. "Database.php"
- Die Konfiguration würde ich in ein Array packen.

btw: Die PHP-Standardfunktionen wurden zum Teil aus der c-stdlib übernommen, deshalb die Schreibweise.
Schau dir mal meinen neuen Blog-Beitrag an: 4. Die Datenbank & Einstellungen. ;)
Denn habe ich geschrieben, bevor ich deinen Beitrag gelesen habe. Aber trotzdem Danke! ;)
Zur Konfiguration:
Naja, wie ich bereits erwähnt hatte, wird die später aus einer INI-Datei ausgelesen.

Zitat

Warum ist der db_link public?

Gute Frage. ich hatte gedacht, das ich das noch irgendwo brauche, wenn z.B. irgendeine Datenbank ausgewählt wird.

Zitat

UTF-8 sollte genutzt werden
Werde ich bearbeiten. Aber wieso ist ist UTF-8 in PHP so sinvoll?
HTML wird sowieso UTF-8 sein.
Wenn euch mein Beitrag weitergeholfen hat, drückt auf "Bedanken"!
Danke! :D

Simon

Profi

Beiträge: 725

Registrierungsdatum: 14.06.2011

Danksagungen: 210

  • Private Nachricht senden

11

06.10.2011, 17:42

Ich würde eher mit den Preferences anfangen, denn deine MySQL Klasse baut zum Beispiel schon darauf auf


Ich würde das ganze anders aufbauen, um weniger Abhängigkeiten zu haben.

Die Daten für die Verbindung sollten von außerhalb kommen.
Sonst wäre die Wiederverwendbarkeit erschwert, denn man müsste immer eine solche .ini Datei haben, um die Datenbankklasse zu betreiben.
Was wenn man aber mal die Daten Hardcoden will? Oder direkt in PHP Arrays? Oder oder oder?

Deshalb wäre es in meinen Augen besser, eine allgemein nutzbare Datenbankklasse zu machen.

JuKu

Profi

  • »JuKu« ist der Autor dieses Themas

Beiträge: 574

Registrierungsdatum: 29.09.2011

Danksagungen: 48

  • Private Nachricht senden

12

06.10.2011, 17:48

Was sagst du zu meinem neuen Artikel? ;)
Meiner Meinung nach sind die Klassen jetzt relativ unabhängig. Die Config-daten werden schon in der Database-Klasse ausgelesen, ...
Wenn euch mein Beitrag weitergeholfen hat, drückt auf "Bedanken"!
Danke! :D

Johannes S.

Fortgeschrittener

Beiträge: 444

Registrierungsdatum: 24.06.2011

Wohnort: Lychen

Danksagungen: 71

  • Private Nachricht senden

13

06.10.2011, 19:24

Also da man später vieleicht noch eine eigene Fehler/Exception-Ausgabe haben wollne wird, und da diese möglischer weise auch mehrsprachig sein soll, würde ich eher eine Exception werfen stat "die" zu nutzen und vieleicht das ganze auch mit mehr "Key"-Artigen Austrücken, für die erst nach der Übersetzung gesucht wird.

Dann würde ich die Methode auch nicht "verbinden()" nennen sondern "connect()".

Der Namen der Klasse sollte immer gleich dem Namen der Datei sein. So das man später einen Autoloader anwenden kann.

Und zu der Schreibung von Variablen und Klasse und Konstanten:
Ich mach es meist wie in Java. Also Klasses beginnen mit einem großen Buchstaben, Variablen mit einem kleinen und Konstanten sind komplett groß. Das Wort Content Manager währe dann als Klasse ContentManager, also Variable contentManager und als Konstante CONTENT_MANAGER. Allerdings weiß ich auch das die bereits vorhandenen PHP-Biblioteken häufig nicht nach dem System benannt sind.
Signatur ?

Erik

Profi

Beiträge: 1 274

Registrierungsdatum: 22.06.2011

Wohnort: Deutschland ;)

Danksagungen: 307

  • Private Nachricht senden

14

06.10.2011, 20:04

Danke, dass du die Posts über dir zusammengefasst hast...
Beste Webite im Internet ( ͡° ͜ʖ ͡°)
xinra.de

Es hat sich bereits 1 registrierter Benutzer bedankt.

Benutzer, die sich für diesen Beitrag bedankt haben:

Johannes S. (06.10.2011)

JuKu

Profi

  • »JuKu« ist der Autor dieses Themas

Beiträge: 574

Registrierungsdatum: 29.09.2011

Danksagungen: 48

  • Private Nachricht senden

15

07.10.2011, 16:36

Also da man später vieleicht noch eine eigene Fehler/Exception-Ausgabe haben wollne wird, und da diese möglischer weise auch mehrsprachig sein soll, würde ich eher eine Exception werfen stat "die" zu nutzen und vieleicht das ganze auch mit mehr "Key"-Artigen Austrücken, für die erst nach der Übersetzung gesucht wird.

Mein Kommentar: Gute Idee! Aber die Sprach-Dateien werden eig. gleich initalisiert.

Dann würde ich die Methode auch nicht "verbinden()" nennen sondern "connect()".

Mein Kommentar: Werde ich machen! Danke für den Tipp!

Der Namen der Klasse sollte immer gleich dem Namen der Datei sein. So das man später einen Autoloader anwenden kann.

Und zu der Schreibung von Variablen und Klasse und Konstanten:
Ich mach es meist wie in Java. Also Klasses beginnen mit einem großen Buchstaben, Variablen mit einem kleinen und Konstanten sind komplett groß. Das Wort Content Manager währe dann als Klasse ContentManager, also Variable contentManager und als Konstante CONTENT_MANAGER. Allerdings weiß ich auch das die bereits vorhandenen PHP-Biblioteken häufig nicht nach dem System benannt sind.

Mein Kommentar: Seh ich nicht wirklich so sinnvoll an, sondern das ist meiner Meinung nach eher egal und man soll es ja besser lesen können. Mal sehen, ob ich es ändere.
Wenn euch mein Beitrag weitergeholfen hat, drückt auf "Bedanken"!
Danke! :D

Erik

Profi

Beiträge: 1 274

Registrierungsdatum: 22.06.2011

Wohnort: Deutschland ;)

Danksagungen: 307

  • Private Nachricht senden

16

07.10.2011, 17:11

Zitat

Seh ich nicht wirklich so sinnvoll an, sondern das ist meiner Meinung nach eher egal und man soll es ja besser lesen können

Genau das ist auch das Gegenargument :D
Beste Webite im Internet ( ͡° ͜ʖ ͡°)
xinra.de

JuKu

Profi

  • »JuKu« ist der Autor dieses Themas

Beiträge: 574

Registrierungsdatum: 29.09.2011

Danksagungen: 48

  • Private Nachricht senden

17

07.10.2011, 17:39

Stimmt auch wieder. :D
Wenn euch mein Beitrag weitergeholfen hat, drückt auf "Bedanken"!
Danke! :D

Ähnliche Themen

Verwendete Tags

CMS, Datenbank, Klasse, MYSQL, PHP, Programmieren