Prepared Statement - Platzhalter für Tabellenname

mccoke

Grünschnabel
Hallo erstmal.. ,


ich habe da eine Frage zu Prepared Statements und Platzhalter. Ist es möglich für die zu selektierende Tabellen ein Platzhalter sprich ein ? zu verwenden?
Hier ein kurzes Beispiel:

PHP:
...
$sql = "SELECT iconid FROM ? WHERE artnr=?";
$stmt = $DBCon->prepare($sql);
$stmt->bindValue(1,$awg_icons); 
$stmt->bindValue(2,$artnr); 

while($result = $this->stmt->fetch( PDO::FETCH_BOTH )) {
	print_r($result);
}

....

Ich hoffe Ihr habt meine Frage verstanden und könnt mir weiterhelfen!

Schonmal danke im vorraus...


Mfg

Mc Coke
 
nein, soweit ich weiß nicht möglich! was soll das für einen sinn haben?
ich mein irgendwie musst du die datenquelle ja angeben.
 
Hallo,
Die Frage erübrigt sich eigentlich. Die Antwort ist auf jeden Fall Nein. Tabellennamen in SQL Statements müssen generell explizit angegeben werden. Die einzigste Stelle an der Wildcards erlaubt sind, ist die WHERE Klausel ansonsten nicht. Macht auch wenig sind da in dem Recordset nur das Ergebnis der Abfrage steht und wie willst du das umgedreht wieder zuordnen können?
Die einzigste Möglichkeit etwas in etwa gleichwertiges zu realisieren, würde über Views führen, Aber die muss man auch statisch hinterlegen und erfüllen somit auch nur suboptimal deine Frage.
Wenn du verräts worum es geht, lässt sich vielleicht eine alternative finden mit der du genauso gut leben kannst.
 
Ich habe zwei Tabellen die gleich aufgebaut sind. Die eine Tabelle enthält Informationen über Besonderheiten eines Produktes und die andere enthält Informationen über die Anwendungsgebiete.

Die Zeile:
PHP:
$stmt->bindValue(1,$awg_icons);

muss in dem Beispiel eingentlich so heißen:

PHP:
$stmt->bindValue(1,$awg_icons[$i]);

Das Array $awg_icons enthält die jeweiligen Tabellennamen.

Meine Absicht ist eigentlich zu verhindern, dass die ähnlichen SQL-Abfragen zweimal im Code auftauchen. Würde das ein Performance-Vorteil bringen oder sollte ich die beiden SQL-Abfragen doch einzeln stehen lassen?


MfG

Mc Coke
 
dat ging fix :)
also eine alternative um die Sache zu beschleunigen wäre die beiden Tabellen über einen Schlüssel zu verknüpfen, der Schlüssel muss wirklich eineindeutig sein, dann brauchst du nur noch eine Abfrage und erhällst automatisch Besonderheiten und Anwendungsgebiete zu deinem Produkt als QueryResult. Sparst dir also einfach eine SQL Abfrage. Vielleicht reicht dir das schon.
 
DIe ganzen Daten will ich zusätzlich noch in einer Session speichern und auf unterschiedlichen Seiten zugreifen und teilweise verwalten. Ist es durch die Verknüpfung dann noch möglich die beiden Spezifikationen (Anwendungsgebiet und Besonderheiten) zu unterscheiden?
 
das Ergebnis eines QueryResults ist ein Recordset, den zerlegst du zum Beispiel mit mysql_fetch_array in ein Array, auf das du dann normal zugreifen kannst, in wie fern du das eindeutig in deinen Sessions speicherst und später auch noch weißt was was ist liegt bei dir ;) stellt aber kein Problem dar, wie gesagt, wie du mit dem Array umgehst liegt ganz allein bei dir und wenn du das Array in 2 Arrays (für jede Tabelle 1) zerlegst.
 
Zurück