• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Problem mit bind_param

freakXHTML

Mitglied
Hallo,
ist das grundsätzlich nicht möglich?

Code:
 $sql = 'SELECT ? FROM user WHERE ID= ?';


Ich habe es nun so gelöst:

Code:
$sql = 'SELECT '.$tmp.' FROM user WHERE ID = ?';

Vielen Dank
lg, freakXHTML
 
Funktioniert ersteres denn nicht? An sich dürfte die Funktion nicht so clever sein, dass es ? nur bei WHERE ersetzt.
Wenn du $tmp ausreichend escapest sollte es beim zweiten Beispiel kein Problem geben.
 
Nein, ersteres funktioniert nicht. Ich habe $tmp gar nicht escaped, da es eine codeinterne Variable ist, die eigentlich von außen nicht beeinflusst werden kann. Soll ich es dennoch machen? Wie mach ich das denn am besten? Mit htmlspecialchars()?

Vielen Dank
lg, freakXHTML
 
Sofern die Variable nicht manipuliert werden kann, brauchst du diese nicht zu escapen. Aber bitte in MySQL escaped man immer mit mysql_real_escape_string().
 
Und in MySQLi mit PHP: mysqli::real_escape_string - Manual.

SELECT ? FROM ... geht -- meines Wissens -- deshalb nicht, weil es dem Prinzip eines Prepared Statements widersprechen würde, die genaue Auswahl der zurückgegebenen Spalten (ich nehme an, das möchtest du damit bezwecken?) variabel zu behalten. Der Sinn eines Prepared Statements liegt darin, die Abfrage bis auf die konkreten Eingabe-Parameter bereits "vorzuübersetzen". Das schließt die zurückzugebenden "Felder" mit ein. Ein Statement mit anderen Rückgaben würde mit einer anderen Struktur übersetzt.

Edit: Ein Vergleich dazu wäre vielleicht eine Funktion in einer Programmiersprache, die bis auf die zu übergebenden konkreten Parameter ebenfalls unveränderlich "vorkompiliert" wird.
 
Alles klar, ich habe bis jetzt nicht escaped, weil nur intern Datenbankanfragen gemacht werden. Diese können vom Nutzer nicht beeinfluss werden.

Herzlichen Dank
lg, freakXHTML
 
Zurück
Oben