Wiederverwendung? 's auf einem DBI vorzubereiten

8

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?

    
User1 05.07.2010, 16:22
quelle

4 Antworten

7

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.

    
hobbs 05.07.2010, 20:21
quelle
4

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%     
Ether 05.07.2010 17:18
quelle
3

@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.

    
pilcrow 06.07.2010 02:55
quelle
0

Sie können SQL-Variablen in einer SQL-Anweisung festlegen und diese Variable dann in der nächsten Abfrage mehrmals verwenden.

%Vor%

Keine duplizierten Variablen und Sie erhalten trotzdem die Sicherheit parametrisierter Abfragen.

    
Despertar 16.06.2016 17:26
quelle

Tags und Links