Ich habe eine SQL-Anweisung ähnlich der in Perl:
%Vor%Der $ a-Wert ist ein freier Text, der alles enthalten kann, einschließlich einfacher Anführungszeichen, Anführungszeichen, Back- und Front-Schrägstrich-Zeichen usw.
Wie können diese Zeichen maskiert werden, damit die SQL-Anweisung funktioniert?
Danke.
Sie können entweder die Methode ->quote
verwenden (vorausgesetzt, Sie verwenden DBI):
Besser ist es, Bind-Werte zu verwenden:
%Vor%Dies sollte auch für Aufrufe von gespeicherten Prozeduren funktionieren, wobei angenommen wird, dass die Anweisung nach dem Erweitern der Zeichenfolgen gültiges SQL ist. Dies kann Treiber / DB-spezifisch sein, also YMMV.
%Vor%Wenn Sie Platzhalter für Abfrageparameter verwenden, müssen Sie den Inhalt der Zeichenfolgen nicht umgehen.
%Vor%Wenn der DBI echte Abfrageparameter verwendet, sendet er die Parameterwerte getrennt von der SQL-Anweisung an das RDBMS. Die Werte werden niemals mit der SQL-Anweisungszeichenfolge kombiniert, daher haben die Werte nie die Möglichkeit, SQL-Injection zu verursachen.
Wenn der DBI vorbereitete Anweisungen "emuliert", indem er die Variablen in die Abfragezeichenfolge interpoliert, sollte DBI die korrekte Escape-Logik behandeln, so dass Sie dies nicht tun müssen. Lassen Sie die Experten (diejenigen, die DBI schreiben und testen) sich Gedanken darüber machen, wie es geht.
Wenn Sie nicht - & gt; quote verwenden möchten (aus irgendeinem Grund läuft diese Funktion nicht auf meiner Version von DBI), versuchen Sie Folgendes:
%Vor%Ich tendiere dazu, das Gleiche mit einfachen Anführungszeichen und Kommas zu machen, nur um sicher zu sein.
Scheint gut für mich zu funktionieren ...!