CTom Geschrieben 16. Dezember 2007 Teilen Geschrieben 16. Dezember 2007 Hi, Nun wende ich mich wieder mal mit einem Problem an euch. Ich bin in PHP nicht der beste und soll nun eine Methode implementieren, die als Resultat eine komplete SQL-JOIN Abfrage zurückgibt! Meine Option wäre eine zusätzliche Tabelle anzulegen in der "alle" Referencen gespeichert sind (PK und FK die aufeinander verweisen) und von dieser ausgehend die JOIN-Abfrage erstellen. Doch ich komme auf keine Lösung. Die Bedingungen sind: - beliebig viele Tabellen JOINen - es sind keine Zwischentabellen angegeben (außer in der referencen Tabelle) mkQuery($arr_cols, $arr_tabs, $str_where, $str_groupBy, $str_having, $str_orderBy) $arr_cols: Für den SELECT Part $arr_tabs: Für den FROM Part Die anderen Parameter sollten sich von selbst erklären! Hat jemand ne gute lösung hierfür oder vielleicht auch ein beispiel Script um mal zu spicken. MfG CTom Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 16. Dezember 2007 Teilen Geschrieben 16. Dezember 2007 Hallo, ohne die Struktur sämtlich Tabellen zu kennen, ist das nicht so einfach. Zusätzlich musst Du wissen was für ein Join es ist (inner, outer, left, right, equiv). Entweder hinterlegst Du die Verknüpfungsoptionen im PHP Code oder - so würde ich es angehen - lies die Contrains aus der Datenbank direkt aus. Bei mySQL funktioniert das nur bei einer InnoDB, bei Postresql auch über die Systemtabellen, analog auch bei MSSQL. Du musst natürlich das DBMS kennen und die Typ der DB, um diese Informationen zu verarbeiten zu können. Zusätzlich rate ich Dir zu Prepare-Statements, um den Syntax der SQL Befehle ohne Probleme umsetzen zu können. Aber ich verstehe nicht, was diese Methode bringen soll, denn sie wird sehr unperformant, da Du immer die Struktur der Datenbank lesen musst, bevor Du das eigentliche Statement absetzt. Du kennst doch die Datenbank, damit kannst Du auch Dein Statement ausführen und es wesentlich schneller HTH Phil Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
CTom Geschrieben 16. Dezember 2007 Autor Teilen Geschrieben 16. Dezember 2007 Wir haben ein Schulprojekt laufen das mehrere fuktionen hat! Unser Lehrer wünscht das ich die methode so schreibe, dass egal wer die Methode benutzt und egal was er für die Parameter übergibt die richtige SQL-Anweisung bekommt (BlackBox). Die von ihm gestellten Regeln beinhalten das niemand direkt auf die DB zugreifen darf! (außer die DB-Gruppe derer ich angehöre) Die Anweisung muss von einem PHP Script generiert werden und es darf keiner direct einen SQL-Befehl benutzen, sondern er "MUSS" meine Methode mkquery(..) etc verwenden! Ansonsten gilt das Projekt als fehlgeschlagen! Laufen haben wir XAMPP 1.6.4 MySQL 5.0.41 (InnoDB ist Default) Wir gehen davon aus das nur Schüler und Lehrer darauf zugreifen können. (ca. 50-60 Person) Aber danke flashpixx :uli Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 16. Dezember 2007 Teilen Geschrieben 16. Dezember 2007 Hallo, sobald ich PHP Scripte hinterlegen kann, kann ich auch direkt mit mysql_query() Selects an die DB abfeuern. Der Sicherheitsaspekt ist da irrelevant. Da im PHP Code Benutzername und Passwort hinterlegt sind, kann man Dein Script leicht umgehen. Ich verstehe den Sinn dieser Methode nicht, denn wenn die Funktion einen String liefert, der dem SQL Select entspricht, muss ich diesen auch an mysql_query geben und dann kann ich auch direkt meinen eigenen eingeben. Eine Sicherheit erreichst Du nur auf Datenbankebene bzw, wenn Du einen Anwendungsserver dazwischen legt, der nach außen wieder eine abstrakte Datenbankschnittstelle zur Verfügung stellt. Die Scripte auf dem Anwendungsserver dürfen natürlich nicht editierbar sein und die Datenbank darf nur von diesem Server Verbindungen akzeptieren Phil Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
CTom Geschrieben 16. Dezember 2007 Autor Teilen Geschrieben 16. Dezember 2007 Das leutchtet mir auch ein aber gemacht werden muss es ja! (Auch wenns nur Intern ist) Was ist also die einfachste Lösung?! MfG Tom Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 16. Dezember 2007 Teilen Geschrieben 16. Dezember 2007 Also ich würde das wenn durch einen Webservice kapseln, der ein SQL Statement bekommt und das Result liefert. Das Statement kannst Du dann bevor Du es an die Datenbank sendest noch entsprechend prüfen Phil Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
CTom Geschrieben 16. Dezember 2007 Autor Teilen Geschrieben 16. Dezember 2007 Was meinst du mit Webservice?! Meinst du damit über ein Frontend (von irgendeinem Anbieter) die SQL Eingeben und dann im Backend prüfen?! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 16. Dezember 2007 Teilen Geschrieben 16. Dezember 2007 Nein, kapsel z.b. Deine eigene Funktion durch einen Webservice, den Du wieder durch ein PHP Script aufrufst (oder andere Sprachen z.B. Java). Die Programme rufen die von Dir geschriebene Funktion auf und erhalten die Ausgabe der Methode zurück z.B. das Resultset der Query. Damit kann man jedes beliebige Statement an den Webservice reichen, Du kannst prüfen, bevor Du ihn an die Datenbank reichst, ob er okay ist, z.B. kannst Du sagen es sind keine Inserts und Deletes erlaubt, führst das Statement aus und gibst die Daten zurück. Der Benutzer des Webservice kann dann entsprechend weiter arbeiten: Wiki Webservice - Wikipedia Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
CTom Geschrieben 16. Dezember 2007 Autor Teilen Geschrieben 16. Dezember 2007 Ok! Verstanden ^^ Danke für deine Hilfe! Man schreibt sich.. GN8 MfG Tom Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.