Tabellenname als Parameter an ein SELECT - Statement übergeben

sqlnoobie

Neuer Benutzer
Beiträge
2
Ich versuche im Rahmen einer Funktion ein SELECT-Statement zu erstellen und dabei den Tabellenname als Parameter an die Funktion zu übergeben. Ich bekomme dann immer die Fehlermeldung, dass "Datenbankname.$Tabelle" nicht vorhanden ist. Ich versuche im Internet eine Antwort zu finden. Da verbirgt sich aber anscheinend nichts, wo der Tabellenname als Parameter übergeben wird.

Vielleicht hat jemand eine Lösung?

Danke
 
Werbung:
Du kannst das nur im Programmcode machen, also nicht in SQL, sondern C, VBA, go, php usw. . Oder in einer SQL Procedure, die ein Execute Command enthält, der das komplette Statement als String-Parameter bekommt. Dabei ist das Problem, das sich eine Prozedur natürlich nicht wie SQL Statement verhält. Es gibt je nach Hersteller aber Procedures oder Table Functions, die sich über den Rückgabetyp wie eine Tabelle verhalten. Keine Ahnung wie das bei mySQL ist.
SQL dynamisch über String-Verkettung zu ändern, kann außerdem das Problem von SQL Injection mit sich bringen, eine Sicherheitsfrage bzw. ein Angriffsvektor, den man verstehen und dem man begegnen muss.

Ach und nochwas:
Anhand deines Nicks und der Frage könnte man den Eindruck haben, dass Du neu bei SQL bist. Oder genauer: Dein Bedarf, solche Statements abzusetzen, bedeutet entweder, dass Du ganz weit vorne bist, weil Du schon seit Jahren abgefahrene Sachen in SQL machst oder dass Du eben ein Anfänger bist.
Der erste Fall ist unwahrscheinlich, weil Du dann die Frage so nicht stellen würdest. Falls Du also neu bist:
Diese Art von Abfrage, die Du machen möchtest, deutet auf grobe Konstruktionsfehler im oder Unverständnis von Datenmodellen hin. Es könnte also ratsam sein, dass Du dein Anliegen nicht so abstrakt beschreibst, sondern etwas detailierter, dann könnte man eine Lösung finden, die sauber und sachgerecht ist.
 
@dabadepdu Stimmt alles und nicht. Hab einige Zeit mit einer nativen Oracle Anwendung zu tun gehabt, wo das Datenhandling dadurch recht einfach war und hab sporadisch mit PHP kleine Anwendungen geschrieben. Zuletzt so vor 15 Jahren, etwa. Jetzt habe ich eine kleine Datenbank mit 4 od. 5 Tabellen und wollte in PHP einen Zugriff über eine Funktion schreiben, die ganz einfach eine Tabelle ausliest und die Daten anzeigt. Da habe ich eben versucht den Tabellennamen als Parameter an die Funktion und somit an das SQL-Statement zu übergeben. Geht wohl nicht. Schade
 
Prepared Statement ist das Zauberwort

und warum nicht so ?

Code:
mysql> PREPARE stmt1 FROM 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';

mysql> SET @a = 3;mysql> SET @b = 4;

mysql> EXECUTE stmt1 USING @a, @b;

+------------+
| hypotenuse|
+------------+
|          5       |
+------------+

mysql> DEALLOCATE PREPARE stmt1;

geht mit und ohne Parameter. Kannst also dein komplettes Statement als Variable haben.

siehe: Manual
 
Werbung:
Hallo, ist eigentlich ganz easy.
$tabname = "meineTabelle";
$SQL = "SELECT * FROM '" . $tabname . "'";
Und dann die query mit db-verbinding etc.
tabname kann auch ein array sein, dann kannst du mehrere Tabellen in einer schleife durchlaufen.
 
Zurück
Oben