Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende ÜberarbeitungLetzte ÜberarbeitungBeide Seiten der Revision | ||
dev:all:examples [19.09.2014 08:39] – [So funktioniert das...] Manuela v.d.Decken | dev:all:examples [18.07.2015 08:32] – [...rund um die Datenbank] Manuela v.d.Decken | ||
---|---|---|---|
Zeile 10: | Zeile 10: | ||
---- | ---- | ||
+ | ===== ...rund um die Datenbank ===== | ||
- | ===== Rund um die Datenbank ===== | + | |
- | Die ganzen Beispiele in diesem Bereich sind im neuen Stil von WB-2.8.4 ausgeführt. Bei älteren Versionen ist meist nur $oDb durch $database und $oDb-> | + | * **[[dev: |
- | ==== SQL-Statements richtig aufgebaut ==== | + | * **[[dev:all:examples:sql-1|Der richtige Einsatz von SQL-Abfragen]]** |
- | Das ist schon < | + | |
- | Also am besten erst ein mal die grundlegensten Regeln: | + | |
- | | + | |
- | * Statements müssen grundsätzlich im SQL-Strikt-Syntax aufgebaut werden | + | |
- | * alle mySql Schlüsselwörter müssen in Großbuchstaben geschrieben werden. | + | |
- | * alle Feld- und Tabellennamen müssen in **`** Backticks eingeschlossen werden. | + | |
- | * Statements dürfen nicht mit **”**text**”**, | + | |
- | SQL-Statements sollten auch optisch so aufgebaut werden, dass sie problemlos und schnell gelesen und erfasst werden können. Die zeilenweise Aufteilung nach Action-Schlüsselwörtern ist an der Stelle sehr sinnvoll. Ist eine Zeile zu lang (Codingstandards) dann mit Einrückung auf mehrere Zeilen verteilen. Bei der Feldauswahl im SELECT-Bereich ist zu beachten, dass der Server komplette Datensätze (SELECT | + | |
- | Um den Aufbau von Statements zu demonstrieren, | + | |
- | ---- | + | |
- | + | ||
- | === SELECT === | + | |
- | Alle vier Beispiele geben ein Result-Objekt mit allen Datensätzen der zum aktuellen Zeitpunkt sichtbaren Sections zurück | + | |
- | <code php Beispiel-1.php> | + | |
- | $iTimestamp = time(); // make sure to use the identical time everywhere | + | |
- | $oResult = $oDb-> | + | |
- | </ | + | |
- | <code php Beispiel-2.php> | + | |
- | $iTimestamp = time(); // make sure to use the identical time everywhere | + | |
- | $sql = ' | + | |
- | $sql .= 'WHERE `page_id`=' | + | |
- | $sql .= 'ORDER BY `block`, `position`'; | + | |
- | $oResult = $oDb-> | + | |
- | </ | + | |
- | <code php Beispiel-3.php> | + | |
- | $iTimestamp = time(); // make sure to use the identical time everywhere | + | |
- | $sql = ' | + | |
- | | + | |
- | . 'FROM `' | + | |
- | . 'WHERE `page_id`=' | + | |
- | | + | |
- | | + | |
- | . 'ORDER BY `block`, `position`'; | + | |
- | $oResult = $oDb-> | + | |
- | </ | + | |
- | <code php Beispiel-4.php> | + | |
- | $iTimestamp = time(); // make sure to use the identical time everywhere | + | |
- | $sql = ' | + | |
- | . 'WHERE `page_id`=' | + | |
- | | + | |
- | | + | |
- | . 'ORDER BY `block`, `position`'; | + | |
- | $oResult = $oDb-> | + | |
- | </ | + | |
- | Welche Beispiele lassen sich leichter lesen, verstehen und bei Bedarf auch leichter ändern? **1**& | + | |
- | ---- | + | |
- | + | ||
- | === DELETE === | + | |
- | Bei dieser Abfrage kann man eigentlich nichts falsch machen... | + | |
- | Aber auch hier gilt: Erst das Statement in einer Variablen aufbauen und diese dann an die Query-Methode übergeben. | + | |
- | <code php DELETE-1.php> | + | |
- | $sql = ' | + | |
- | . 'WHERE `user_id`=' | + | |
- | $oDb-> | + | |
- | </ | + | |
- | ---- | + | |
- | + | ||
- | === INSERT / UPDATE === | + | |
- | In diesem Bereich wird es langsam interessant. Es gibt mehrere verschiedene Arten die Statements | + | |
- | Bei **allen** Arten von INSERTs gilt jedoch die SQL-Strikt Regel, dass **allen** Feldern eines Datensatzes Werte zugewiesen werden müssen. Ausgenommen hiervon sind nur die Felder, die in der Tabelle bereits mit einem Default-Wert vordefiniert sind. | + | |
- | Immer wenn Daten in die Datenbank geschrieben werden sollen, sind bestimmte Sicherheitsregeln zu beachten. | + | |
- | * Es muss sichergestellt sein, dass nur der richtige Datentyp übergeben wird. | + | |
- | | + | |
- | | + | |
- | * Stringvariable müssen vor der Übergabe '// | + | |
- | * Enthält eine Tabelle ein // | + | |
- | :!: Im Umfeld von WebsiteBaker ist für INSERT und UPDATE Statements ausschließlich die ' | + | |
- | + | ||
- | Erst ein Beispiel wie ein Statement (obwohl syntaktisch richtig) **nicht** aussehen darf: | + | |
- | <code php insert-01.php> | + | |
- | // das ist übrigens ein Original-Statement aus WB-2.8.3-SP1 'add user' | + | |
- | $sql = " | + | |
- | </ | + | |
- | Das selbe Statement jetzt nach den zuvor beschriebenen Regeln: | + | |
- | <code php insert-02.php> | + | |
- | $sql = ' | + | |
- | . 'SET `group_id`=' | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | </ | + | |
- | Ein UPDATE sieht im Prinzip genau so aus: | + | |
- | <code php SET-1.php> | + | |
- | $sql = ' | + | |
- | . 'SET `display_name`=\'' | + | |
- | | + | |
- | . 'WHERE `user_id`=' | + | |
- | </ | + | |