Versionen von Entwickler.HowtoDB

Unwichtige Korrekturen ausblenden - Änderungen im Wiki Quelltext

 
 
01.04.2011 23:02 Uhr von tthelen -
Zeile 1 bearbeitet:

(:redirect 'http://docs.studip.de/develop/Entwickler/HowToDB':)

geändert in:

(:redirect 'http://docs.studip.de/develop/Entwickler/HowtoDB':)

 
 
01.04.2011 23:02 Uhr von tthelen -
Zeilen 1-2 hinzugefügt:

(:redirect 'http://docs.studip.de/develop/Entwickler/HowToDB':)

 
 
21.12.2010 12:24 Uhr von mlunzena -
Zeilen 17-29 hinzugefügt:

Slave-Zugriffe

Wenn man lesende Zugriffe hat, deren Korrektheit nicht 100% gewährleistet sein muss (autocompleter), kann man zur Steigerung der Performance auch den Slave ansprechen:

(:source lang=php:)
$db = DBManager::get("studip-slave");
$result = $db->query("SELECT * FROM user_info WHERE Nachname = '".$name."'")->fetchAll();
foreach ($result as $nutzer) {
}

Wenn die Installation keine Replikation verwendet, werden die Anfragen an den Slave automatisch auf den (einzigen) Master gerichtet.

 
 
20.08.2009 12:47 Uhr von Krassmus -
Zeilen 5-12 bearbeitet:

Stud.IP verwendet standardmäßig die MySQL-Datenbank.

Bitte nur noch PDO benutzen!

TODO

Beispiel einer MySQL-Abfrage mit PDO

geändert in:

Stud.IP verwendet standardmäßig die MySQL-Datenbank. Um auf diese Datenbanken zuzugreifen wurde sowohl die Klasse DBManager angelegt und PDO benutzt. Alle Datenbankzugriffe in Stud.IP sollen ab jetzt direkt über PDO funktionieren. Im Quellcode bedeutet dies konkret, dass ein Datenbankzugriff so ähnlich aussieht:

Zeilen 8-9 bearbeitet:

$results = DBManager::get()->query(SQL)->fetchAll(PDO:FETCH_ASSOC); @]

geändert in:

$db = DBManager::get(); $result = $db->query("SELECT * FROM user_info WHERE Nachname = '".$name."'")->fetchAll(); foreach ($result as $nutzer) { } @]

Der DBManager sorgt für die Verbindung zur Datenbank und PDO regelt also die Zugriffe, sobald das Verbindungsobjekt $db erst einmal initialisiert ist.

Weitere Infos zu PDO findet man unter php.net.

SQL-Injections

Wichtig um SQL-Injections zu verhindern: Es gibt zwei Methoden, um eklige Datenbankhacks durch Einspeisen von bösem SQL-Code zuvor zu kommen. Das obige Beispiel ist im Grunde noch nicht geschützt.

1.) Wannimmer man eine potentiell gefährliche Variable in ein SQL-Statement einfügt, sollte die Variable über $db->quote($name) geschehen. Der Quellcode dazu sieht dann so aus:

(:source lang=php:)
$db = DBManager::get();
$result = $db->query("SELECT * FROM user_info WHERE Nachname = '".$db->quote($name)."'")->fetchAll();
foreach ($result as $nutzer) {
}

2.) Man sollte bei einem System wie Stud.IP immer auch auf die Performance achten. Dazu kann es sehr sinnvoll sein, häufig auftauchende Befehle über prepare vorzubereiten, damit die Datenbank ein- und denselben Befehl nicht jedes mal neu umsetzen muss.

(:source lang=php:)
$db = DBManager::get();
$preparation = $db->prepare("SELECT * FROM auth_user_md5 WHERE Nachname = :name", array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$preparation->execute(array('name' => $name));
$result = $preparation->fetchAll();
foreach ($result as $nutzer) {
}

Dies ist im Zweifelsfall die saubere Variante, weil sie der Datenbank das Leben erleichtert und zudem SQL-Injections automatisch verhindert.

 
 
18.06.2009 22:01 Uhr von mriehe -
Zeilen 1-4 hinzugefügt:
 
 
18.06.2009 22:00 Uhr von mriehe -
Zeilen 10-44 bearbeitet:

$db = DBManager::get(); $results = $db->query(SQL)->fetchAll(PDO:FETCH_ASSOC); @]

veraltet…

Um Transaktionen mit der Datenbank durchzuführen, stellt Stud.IP eine eigene Bibliothek (DB_Seminar) mit Funktionen dafür bereit, die sich in der Datei studip/lib/phplib_local.inc.php befindet. Diese muss nicht explizit eingebunden werden. DB_Seminar ist abgeleitet von DB_Sql (studip/lib/phplib/db_mysql.inc).

Die Klasse

Die Klasse DB_Seminar enthält Methoden zur Kommunikation mit einer MySQL-Datenbank. Hierfür erzeugt man eine Instanz der Klasse und übergibt als Parameter die MySQL-Abfrage, woraufhin, falls noch nicht vorhanden, eine Verbindung zur Datenbank erzeugt wird. Nachdem die Abfrage erfolgreich ausgeführt wurde, stehen verschiedene Methoden zum Abruf der Daten zur Verfügung.

Eigenschaften der Klasse

  • DB_Seminar::Record: Die Eigenschaft ist ein Array und enthält die aktuelle Zeile des Datensatzes, der aus der MySQL-Tabelle ausgelesen wurde. Die Daten sind sowohl in der Standardform als auch der assoziativen Variante hinterlegt.
  • DB_Seminar::Row: Die Eigenschaft beschreibt die aktuelle Zeilenzahl des im Array DB_Seminar::Record hinterlegten Datensatzes aus der MySQL-Tabelle. -}

Methoden zum Abruf von Daten

  • DB_Seminar::next_record(): Die Methode schreibt den Datensatz in die Eigenschaft DB_Seminar::Record und inkrementiert die Zeilenzahl DB_Seminar::Row mit jedem Aufruf um eins. So lange noch Daten vorhanden sind, gibt die Methode true zurück, ansonsten false.
  • DB_Seminar::seek($pos): Die Methode prüft, ob die als Parameter übergebene Position im Datensatz vorhanden ist. Im Erfolgsfall gibt die Methode true zurück und weist der Eigenschaft DB_Seminar::Row die übergebene Position zu. Anderenfalls wird false zurückgegeben und DB_Seminar::Row erhält die Position des letzten Elements des Datensatzes.

Es gibt unterschiedliche Möglichkeiten, die von der Datenbank erhaltenen Daten auszulesen.

Beispiel einer MySQL-Abfrage

(:source lang=php:)[@ $sql =& new DB_Seminar('SELECT * FROM tabelle');

while ($sql->next_record()) {

    echo _($sql->Record['spalte']);
    echo _($sql->Record[0]);
    echo _('<br />');

}

geändert in:

$results = DBManager::get()->query(SQL)->fetchAll(PDO:FETCH_ASSOC);

 
 
25.04.2009 13:30 Uhr von mriehe -
Zeile 11 bearbeitet:

$results = $db->query(SQL)->fetchAll(PDO:FETCH_ASSOC)

geändert in:

$results = $db->query(SQL)->fetchAll(PDO:FETCH_ASSOC);

 
 
25.04.2009 13:30 Uhr von mriehe -
Zeilen 3-8 bearbeitet:

Bitte nur noch PDO benutzen!

{-Um Transaktionen mit der Datenbank durchzuführen, stellt Stud.IP eine eigene Bibliothek (DB_Seminar) mit Funktionen dafür bereit, die sich in der Datei studip/lib/phplib_local.inc.php befindet. Diese muss nicht explizit eingebunden werden. DB_Seminar ist abgeleitet von DB_Sql (studip/lib/phplib/db_mysql.inc).-}

geändert in:

Bitte nur noch PDO benutzen!

TODO

Beispiel einer MySQL-Abfrage mit PDO

(:source lang=php:)
$db = DBManager::get();
$results = $db->query(SQL)->fetchAll(PDO:FETCH_ASSOC)

veraltet…

Um Transaktionen mit der Datenbank durchzuführen, stellt Stud.IP eine eigene Bibliothek (DB_Seminar) mit Funktionen dafür bereit, die sich in der Datei studip/lib/phplib_local.inc.php befindet. Diese muss nicht explizit eingebunden werden. DB_Seminar ist abgeleitet von DB_Sql (studip/lib/phplib/db_mysql.inc).

Zeilen 22-23 bearbeitet:

Die Klasse DB_Seminar enthält Methoden zur Kommunikation mit einer MySQL-Datenbank. Hierfür erzeugt man eine Instanz der Klasse und übergibt als Parameter die MySQL-Abfrage, woraufhin, falls noch nicht vorhanden, eine Verbindung zur Datenbank erzeugt wird. Nachdem die Abfrage erfolgreich ausgeführt wurde, stehen verschiedene Methoden zum Abruf der Daten zur Verfügung.

geändert in:

Die Klasse DB_Seminar enthält Methoden zur Kommunikation mit einer MySQL-Datenbank. Hierfür erzeugt man eine Instanz der Klasse und übergibt als Parameter die MySQL-Abfrage, woraufhin, falls noch nicht vorhanden, eine Verbindung zur Datenbank erzeugt wird. Nachdem die Abfrage erfolgreich ausgeführt wurde, stehen verschiedene Methoden zum Abruf der Daten zur Verfügung.

Zeilen 25-27 bearbeitet:

{-* DB_Seminar::Record: Die Eigenschaft ist ein Array und enthält die aktuelle Zeile des Datensatzes, der aus der MySQL-Tabelle ausgelesen wurde. Die Daten sind sowohl in der Standardform als auch der assoziativen Variante hinterlegt.

  • DB_Seminar::Row: Die Eigenschaft beschreibt die aktuelle Zeilenzahl des im Array DB_Seminar::Record hinterlegten Datensatzes aus der MySQL-Tabelle.-}
geändert in:
  • DB_Seminar::Record: Die Eigenschaft ist ein Array und enthält die aktuelle Zeile des Datensatzes, der aus der MySQL-Tabelle ausgelesen wurde. Die Daten sind sowohl in der Standardform als auch der assoziativen Variante hinterlegt.
  • DB_Seminar::Row: Die Eigenschaft beschreibt die aktuelle Zeilenzahl des im Array DB_Seminar::Record hinterlegten Datensatzes aus der MySQL-Tabelle. -}
Zeile 30 bearbeitet:

{-* DB_Seminar::next_record(): Die Methode schreibt den Datensatz in die Eigenschaft DB_Seminar::Record und inkrementiert die Zeilenzahl DB_Seminar::Row mit jedem Aufruf um eins. So lange noch Daten vorhanden sind, gibt die Methode true zurück, ansonsten false.

geändert in:
  • DB_Seminar::next_record(): Die Methode schreibt den Datensatz in die Eigenschaft DB_Seminar::Record und inkrementiert die Zeilenzahl DB_Seminar::Row mit jedem Aufruf um eins. So lange noch Daten vorhanden sind, gibt die Methode true zurück, ansonsten false.
Zeile 33 bearbeitet:

Es gibt unterschiedliche Möglichkeiten, die von der Datenbank erhaltenen Daten auszulesen.-}

geändert in:

Es gibt unterschiedliche Möglichkeiten, die von der Datenbank erhaltenen Daten auszulesen.

 
 
25.04.2009 13:24 Uhr von mriehe -
Zeilen 6-8 bearbeitet:

DB_Seminar ist abgeleitet von DB_Sql (studip/lib/phplib/db_mysql.inc).

geändert in:

DB_Seminar ist abgeleitet von DB_Sql (studip/lib/phplib/db_mysql.inc).-}

Zeilen 11-12 bearbeitet:

Die Klasse DB_Seminar enthält Methoden zur Kommunikation mit einer MySQL-Datenbank. Hierfür erzeugt man eine Instanz der Klasse und übergibt als Parameter die MySQL-Abfrage, woraufhin, falls noch nicht vorhanden, eine Verbindung zur Datenbank erzeugt wird. Nachdem die Abfrage erfolgreich ausgeführt wurde, stehen verschiedene Methoden zum Abruf der Daten zur Verfügung.

geändert in:

Die Klasse DB_Seminar enthält Methoden zur Kommunikation mit einer MySQL-Datenbank. Hierfür erzeugt man eine Instanz der Klasse und übergibt als Parameter die MySQL-Abfrage, woraufhin, falls noch nicht vorhanden, eine Verbindung zur Datenbank erzeugt wird. Nachdem die Abfrage erfolgreich ausgeführt wurde, stehen verschiedene Methoden zum Abruf der Daten zur Verfügung.

Zeilen 15-17 bearbeitet:
  • DB_Seminar::Record: Die Eigenschaft ist ein Array und enthält die aktuelle Zeile des Datensatzes, der aus der MySQL-Tabelle ausgelesen wurde. Die Daten sind sowohl in der Standardform als auch der assoziativen Variante hinterlegt.
  • DB_Seminar::Row: Die Eigenschaft beschreibt die aktuelle Zeilenzahl des im Array DB_Seminar::Record hinterlegten Datensatzes aus der MySQL-Tabelle.
geändert in:

{-* DB_Seminar::Record: Die Eigenschaft ist ein Array und enthält die aktuelle Zeile des Datensatzes, der aus der MySQL-Tabelle ausgelesen wurde. Die Daten sind sowohl in der Standardform als auch der assoziativen Variante hinterlegt.

  • DB_Seminar::Row: Die Eigenschaft beschreibt die aktuelle Zeilenzahl des im Array DB_Seminar::Record hinterlegten Datensatzes aus der MySQL-Tabelle.-}
Zeile 20 bearbeitet:
  • DB_Seminar::next_record(): Die Methode schreibt den Datensatz in die Eigenschaft DB_Seminar::Record und inkrementiert die Zeilenzahl DB_Seminar::Row mit jedem Aufruf um eins. So lange noch Daten vorhanden sind, gibt die Methode true zurück, ansonsten false.
geändert in:

{-* DB_Seminar::next_record(): Die Methode schreibt den Datensatz in die Eigenschaft DB_Seminar::Record und inkrementiert die Zeilenzahl DB_Seminar::Row mit jedem Aufruf um eins. So lange noch Daten vorhanden sind, gibt die Methode true zurück, ansonsten false.

Zeilen 23-24 bearbeitet:

Es gibt unterschiedliche Möglichkeiten, die von der Datenbank erhaltenen Daten auszulesen.

geändert in:

Es gibt unterschiedliche Möglichkeiten, die von der Datenbank erhaltenen Daten auszulesen.-}

Zeile 35 bearbeitet:

@]-}

geändert in:

@]

 
 
25.04.2009 13:23 Uhr von mriehe -
Zeilen 1-5 bearbeitet:

Stud.IP verwendet standardmäßig die MySQL-Datenbank. Um Transaktionen mit der Datenbank durchzuführen, stellt Stud.IP eine eigene Bibliothek (DB_Seminar) mit Funktionen dafür bereit, die sich in der Datei studip/lib/phplib_local.inc.php befindet. Diese muss nicht explizit eingebunden werden.

geändert in:

Stud.IP verwendet standardmäßig die MySQL-Datenbank.

Bitte nur noch PDO benutzen!

{-Um Transaktionen mit der Datenbank durchzuführen, stellt Stud.IP eine eigene Bibliothek (DB_Seminar) mit Funktionen dafür bereit, die sich in der Datei studip/lib/phplib_local.inc.php befindet. Diese muss nicht explizit eingebunden werden.

Zeile 35 bearbeitet:

@]

geändert in:

@]-}

 
 
06.11.2008 23:11 Uhr von spieckermann -
Zeile 1 bearbeitet:

Stud.IP verwendet standardmäßig die MySQL-Datenbank. Um Transaktionen mit der Datenbank durchzuführen, stellt Stud.IP eine eigene Bibliothek (DB_Seminar) mit Funktionen dafür bereit, die sich in der Datei \textit{studip/lib/phplib_local.inc.php} befindet. Diese muss nicht explizit eingebunden werden.

geändert in:

Stud.IP verwendet standardmäßig die MySQL-Datenbank. Um Transaktionen mit der Datenbank durchzuführen, stellt Stud.IP eine eigene Bibliothek (DB_Seminar) mit Funktionen dafür bereit, die sich in der Datei studip/lib/phplib_local.inc.php befindet. Diese muss nicht explizit eingebunden werden.

 
 
06.11.2008 21:35 Uhr von spieckermann -
Zeilen 1-31 hinzugefügt:

Stud.IP verwendet standardmäßig die MySQL-Datenbank. Um Transaktionen mit der Datenbank durchzuführen, stellt Stud.IP eine eigene Bibliothek (DB_Seminar) mit Funktionen dafür bereit, die sich in der Datei \textit{studip/lib/phplib_local.inc.php} befindet. Diese muss nicht explizit eingebunden werden. DB_Seminar ist abgeleitet von DB_Sql (studip/lib/phplib/db_mysql.inc).

Die Klasse

Die Klasse DB_Seminar enthält Methoden zur Kommunikation mit einer MySQL-Datenbank. Hierfür erzeugt man eine Instanz der Klasse und übergibt als Parameter die MySQL-Abfrage, woraufhin, falls noch nicht vorhanden, eine Verbindung zur Datenbank erzeugt wird. Nachdem die Abfrage erfolgreich ausgeführt wurde, stehen verschiedene Methoden zum Abruf der Daten zur Verfügung.

Eigenschaften der Klasse

  • DB_Seminar::Record: Die Eigenschaft ist ein Array und enthält die aktuelle Zeile des Datensatzes, der aus der MySQL-Tabelle ausgelesen wurde. Die Daten sind sowohl in der Standardform als auch der assoziativen Variante hinterlegt.
  • DB_Seminar::Row: Die Eigenschaft beschreibt die aktuelle Zeilenzahl des im Array DB_Seminar::Record hinterlegten Datensatzes aus der MySQL-Tabelle.

Methoden zum Abruf von Daten

  • DB_Seminar::next_record(): Die Methode schreibt den Datensatz in die Eigenschaft DB_Seminar::Record und inkrementiert die Zeilenzahl DB_Seminar::Row mit jedem Aufruf um eins. So lange noch Daten vorhanden sind, gibt die Methode true zurück, ansonsten false.
  • DB_Seminar::seek($pos): Die Methode prüft, ob die als Parameter übergebene Position im Datensatz vorhanden ist. Im Erfolgsfall gibt die Methode true zurück und weist der Eigenschaft DB_Seminar::Row die übergebene Position zu. Anderenfalls wird false zurückgegeben und DB_Seminar::Row erhält die Position des letzten Elements des Datensatzes.

Es gibt unterschiedliche Möglichkeiten, die von der Datenbank erhaltenen Daten auszulesen.

Beispiel einer MySQL-Abfrage

(:source lang=php:)
$sql =& new DB_Seminar('SELECT * FROM tabelle');

while ($sql->next_record()) {
    echo _($sql->Record['spalte']);
    echo _($sql->Record[0]);
    echo _('<br />');
}

 

 

Quelle: Basis-Wiki-Hilfe | Letzte Änderung: 01.04.2011 23:02 Uhr, tthelen | Local view: Basis-Hilfe