Hallo zusammen,
ich hatte heute einen sehr langen SQL-Query (weit mehr als 1000 Zeichen), da kam mir eine Idee. Einige von euch kennen sicher die großen PHP Frameworks ala Laravel, Symfony,Doctrine und co. Alle haben einen QueryBuilder dabei. Meist ist dieser aber tief im System drin, sodass man auch andere Teile nutzt als nur diesen Query Builder.
Deshalb hab ich mir fix eine Klasse geschrieben, die genau das für mich tut, also Querys "builden".
Beispiel:
|
MySQL-Abfrage(n)
|
1
|
SELECT b.bestellungID,b.bestellungDatum,p.p_name FROM `bestellungen` as b INNER JOIN `praemie` as p ON b.p_id = p.p_id WHERE b.bestellungID = :bid OR b.bestellungZeitraum > :timestampGestern
|
(ja gut so lang ist der Query jetzt nicht

aber Programmierer sind ja faul) Wer blickt denn da auf einen Blick durch? Kaum einer.
Deshalb sieht es bei mir so aus:
|
PHP-Quelltext
|
1
2
3
4
5
6
7
8
|
<?php
$queryBuilderSELECT = new lkdevelopment\QueryBuilder();
$queryBuilderSELECT->select("b.bestellungID", "b.bestellungDatum","p.p_name")
->from("bestellungen", "b")
->innerJoin("praemie", "p", "b.p_id = p.p_id")
->where("b.bestellungID = :bid")
->orWhere("b.bestellungZeitraum > :timestampGestern");
?>
|
Ahh das sieht doch schon mal viel einfacher aus

Und wenn ich mir nun $queryBuilderSELECT ausgeben lasse (vollkommen egal wie), steht da:
|
MySQL-Abfrage(n)
|
1
|
SELECT b.bestellungID,b.bestellungDatum,p.p_name FROM `bestellungen` as b INNER JOIN `praemie` as p ON b.p_id = p.p_id WHERE b.bestellungID = :bid OR b.bestellungZeitraum > :timestampGestern
|
Natürlich funktioniert das auch in der prepare Methode von mysqli oder PDO & in der mysql(i)_query Funktion.
Eine genaue Beschreibung & Dokumentation, genauso wie den Github Link (zum Download) findet ihr
HIER.
Ich entwickle das ganze weiter, sodass es später einmal in der Lage ist direkt zu sagen ob die Spalte die angefordert wird überhaupt existiert und so weiter.
Mit freundlichen Grüßen
Lukas Kämmerling aka $this->getUser();