PHP PDO SELECT ... WHERE $var IS NULL

smallwall

Lt. Junior Grade
Dabei seit
Feb. 2014
Beiträge
446
Dieser Code funktioniert
PHP:
$sel = "SELECT * FROM " . $p->filetable . " WHERE White IS NULL";

$stmt = $p->con->prepare($sel);
$stmt->execute();
Dieser Code funktioniert NICHT

PHP:
$field = "White";

$sel = "SELECT * FROM " . $p->filetable . " WHERE :field IS NULL";

$stmt = $p->con->prepare($sel);
$stmt->bindParam(":field", $field);

$stmt->execute();
Was habe ich bei diesem PDO Query falsch gemacht?
 

Jesterfox

Fleet Admiral
Dabei seit
März 2009
Beiträge
39.415
Normalerweise kann man bei prepared Statements nur Werte binden, aber keine Feldnamen oder ähnliches. Das dürfte hier das Problem sein. Was aber oft auch ein Hinweis auf ein "kaputtes" DB-Design ist wenn man dynamische Feldnamen benötigt...
 

smallwall

Lt. Junior Grade
Ersteller dieses Themas
Dabei seit
Feb. 2014
Beiträge
446
Nur Werte, ok vielen Dank, so klappt das auch:
PHP:
$sel = "SELECT * FROM " . $p->filetable . " WHERE ".$field." IS NULL";
 

Jesterfox

Fleet Admiral
Dabei seit
März 2009
Beiträge
39.415
Wenn du Statements per Stringoperationen zusammenbaust solltest du dir aber auf alle Fälle Gedanken über SQL Injection machen und am besten nur eine Whitelist an Werten zulassen.

Das die prepared Statements da so sicher dagegen sind liegt unter anderem daran dass die Parameter grundsätzlich als Werte interpretiert werden und somit ds Statement selbst nicht verändern können.
 

smallwall

Lt. Junior Grade
Ersteller dieses Themas
Dabei seit
Feb. 2014
Beiträge
446
Ja, da hast Du recht, es ist aber nur für eine interne debug funktion, ich wollte mir verschiedene "NULL" Felder anschauen.

Edit: Achso, NULL-Felder anschauen macht natürlich keinen Sinn, sondern den Rest der Zeile wollte ich mir anschauen :p
 
Zuletzt bearbeitet:

mambokurt

Commander
Dabei seit
Aug. 2011
Beiträge
2.130
Tabelle mit A, B, C als Spalte

SELECT * FROM TABELLE WHERE (A = B = C) IS NULL

Hab ich jetzt nicht ausprobiert, aber Vergleiche von einem Feld mit einem Feld, was NULL ist, sollten NULL zurückliefern, sprich ist eins von den Feldern Null sollte NULL zurückkommen. Da MySQL das relativ frei von der Leber weg castet sollte das eigentlich gehen....
 
Top