Entwickler.HowtoDB History

Show minor edits - Show changes to markup

 
 
April 01, 2011, at 11:02 PM by tthelen -
Changed line 1 from:

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

to:

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

 
 
April 01, 2011, at 11:02 PM by tthelen -
Added lines 1-2:

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

 
 
December 21, 2010, at 12:24 PM by mlunzena -
Added lines 17-29:

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.

 
 
August 20, 2009, at 12:47 PM by Krassmus -
Changed lines 5-12 from:

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

Bitte nur noch PDO benutzen!

TODO

Beispiel einer MySQL-Abfrage mit PDO

to:

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:

Changed lines 8-9 from:

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

to:

$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.

 
 
June 18, 2009, at 10:01 PM by mriehe -
Added lines 1-4:
 
 
June 18, 2009, at 10:00 PM by mriehe -
Changed lines 10-44 from:

$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 />');

}

to:

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

 
 
April 25, 2009, at 01:30 PM by mriehe -
Changed line 11 from:

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

to:

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

 
 
April 25, 2009, at 01:30 PM by mriehe -
Changed lines 3-8 from:

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).-}

to:

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).

Changed lines 22-23 from:

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.

to:

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.

Changed lines 25-27 from:

{-* 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.-}
to:
  • 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. -}
Changed line 30 from:

{-* 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.

to:
  • 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.
Changed line 33 from:

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

to:

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

 
 
April 25, 2009, at 01:24 PM by mriehe -
Changed lines 6-8 from:

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

to:

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

Changed lines 11-12 from:

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.

to:

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.

Changed lines 15-17 from:
  • 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.
to:

{-* 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.-}
Changed line 20 from:
  • 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.
to:

{-* 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.

Changed lines 23-24 from:

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

to:

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

Changed line 35 from:

@]-}

to:

@]

 
 
April 25, 2009, at 01:23 PM by mriehe -
Changed lines 1-5 from:

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.

to:

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.

Changed line 35 from:

@]

to:

@]-}

 
 
November 06, 2008, at 11:11 PM by spieckermann -
Changed line 1 from:

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.

to:

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.

 
 
November 06, 2008, at 09:35 PM by spieckermann -
Added lines 1-31:

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 />');
}

 

 

Source: Basis-Wiki-Hilfe | Last change: April 01, 2011, at 11:02 PM, tthelen | Local view: Basis-Hilfe