Gibt es eine Möglichkeit, die in einer DBI-Prepare-Anweisung verwendeten? Betrachten Sie den folgenden Code:
%Vor%Es wäre sehr schön, stattdessen so etwas zu verwenden:
%Vor% Beachten Sie, dass nur eine $a
anstelle von drei an die Ausführung übergeben wird. Gibt es einen Weg, dies im wirklichen Leben zu tun?
Es hängt von Ihrer DBD ab. Wenn Sie beispielsweise DBD :: Pg mit dem -Stil von Platzhaltern oder DBD :: Oracle mit benannten Platzhaltern und
bind_param
verwenden, können Sie genau das tun, was Sie möchten. Aber es ist nicht möglich, den allgemeinen Stil ?
von Platzhaltern zu verwenden, der DBI-weit funktioniert.
Wenn Sie eine Bibliothek verwenden, um Ihre SQL-Anweisungen für Sie zu generieren, z. SQL :: Abstract oder ein vollständiges ORM wie DBIx :: Class , Sie müssen sich um solche Dinge keine Gedanken machen.
Alternativ können Sie etwas ähnliches mit nur ein paar Zeilen Code tun:
%Vor%@hobbs Antwort ist richtig - Standard DBI-Platzhalter können das nicht tun. @ Ethers Antwort ist richtig - eine SQL-Abstraktion kann machen Dies ist ein Nicht-Problem.
Allerdings muss typischerweise nur jeden einzelnen parametrisierten Wert einmal binden . In Ihrem Beispiel stellt die Verwendung einer skalargestützten Tabelle den vom Benutzer bereitgestellten Wert für den Rest der Abfrage nach Name zur Verfügung:
%Vor%Normalerweise ist dies inkrementell mehr "wire efficient" als die Alternative, da der vom Benutzer angegebene Parameter typischerweise nur einmal anstelle von N mal übertragen wird.