Alexander (HH): Problem mit Prepared Statement bei Postgres

Beitrag lesen

Moin Moin!

Eine SQL Abfrage in MySQL funktionierte so:

$dboResultText = $DBO->prepare("SELECT TextID, ".$userlang."  FROM ir_text  WHERE :userlang != '' AND UsedInInterface = 'yes'");

$dboResultText->bindParam(':userlang', $userlang);
$dboResultText->execute();


>   
> Für Postgres versuche ich es nun so:  
>   
> ~~~php

$dboResultText = $DBO->prepare('SELECT "TextID", '.$userlang.'  FROM ir.ir_text  WHERE :userlang != "" AND "UsedInInterface" = "yes"');  

> $dboResultText->bindParam(':userlang', $userlang);  
> $dboResultText->execute();

Hier kommt nun aber eine Fehlermeldung:

FEHLER: Bezeichner in Anführungszeichen hat Länge null bei »""« LINE 1: ...TextID", English FROM ir.ir_text WHERE $1 != "" AND

Vermutlich kann bindParam nicht aufgelöst werden bzw. stimmt "WHERE :userlang" nicht.

Mumpitz. Lies die Fehlermeldung.

Ich weiss aber nicht wie man dies anders schreiben könnte?

Na, richtig halt. ;-)

MySQL kennt zwischen Single und Double Quotes keinen Unterschied, beide erzeugen Strings. Der Rest der SQL-Welt nutzt Single Quotes für Strings und Double Quotes für Identifier. Letztere quoted MySQL an allen Standards vorbei mit Backticks. Frag mich nicht, was die Leute geraucht haben ...

Schau Dir die Where-Bedingung mal genauer an. Hast Du eine Spalte namens ""? Oder eine namens "yes"?

Am Rande: Woher hast Du eigentlich die merkwürdige Idee, alle Identifier quoten zu müssen?

Alexander

--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".