Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...