This is an old revision of the document!
This page is not fully translated, yet. Please help completing the translation.
(remove this paragraph once the translation is finished)
This chapter is intended to show common mistakes/improper use of databases in earlier versions of WB and also offer the appropriate solutions. The offending code fragments are not invented, but taken from original WB and modules!
Attention: The following examples are not intended for copy&paste programming, but only exemplary of thinking ideas that are intended to show how a problem can be solved!
Es wird einfach anhand der `user_id` ein einzelner Datensatz in der Tabelle `users` gesucht
falsch
$query = $database->query("SELECT * FROM '.TABLE_PREFIX.'users WHERE user_id = $user_id LIMIT 1"); if ($query->numRows() > 0) { while ($user = $query->fetchRow()) { // all ok, do something with the data } }
Dieser Code enthält gleich mehrere Problemstellen und überflüssigen Code:
Nach den neuen Standards von WB korrigiert, ergibt sich dadurch folgendes richtige Codefragment:
$sql = 'SELECT * FROM `'.$oDb->TablePrefix.'users` ' . 'WHERE `user_id`='.$user_id; if (($oResult = $oDb->doQuery($sql))) { if (($aUser = $oResult->fetchArray())) { // all ok, do something with the data now } else { // no user record found } } else { // error on executing query }
(zur Vereinfachung werden nur die SQL-Statements dargestellt.)
Hierzu werden Daten aus zwei Tabellen benötigt: die Daten aus 'wb_pages' sowie der Benutzername aus der Tabelle 'wb_users'.
Diese Aufgabe ist ohne jeden zusätzlichen PHP-Code rein mit SQL elegant lösbar. Dazu müssen nur die beiden Tabellen über die Felder 'modified_by' und 'user_id' durch einen JOIN miteinander verknüpft werden.
Es lohnt sich auf jeden Fall, sich in SQL einzulesen um die Grundlagen zu begreifen.
SELECT `wb_users`.`display_name`, `wb_pages`.* FROM `wb_pages` LEFT JOIN `wb_users` ON `wb_pages`.`modified_by`=`wb_users`.`user_id` WHERE `wb_pages`.`page_id`=1
… wird mit Auftauchen weiterer Beispiele kontinuierlich fortgesetzt!