Ich speichere und bearbeite ein Feld in einer Datenbank mit einer langen Folge von einem oder mehreren Sätzen. Wenn ich ein einzelnes Anführungszeichen in das Textfeld einfüge und es speichern möchte, löst es eine Ausnahme aus "Falsche Syntax in der Nähe von 'l'. Ungeschlossenes Anführungszeichen nach der Zeichenfolge ''. " Gibt es eine Idee, das zu vermeiden?
BEARBEITEN: Die Abfrage lautet:
%Vor%Schreiben Sie ein gespeichertes Produkt für die Feldbearbeitung und verwenden Sie SQL-Parameter, um den Wert zu speichern. Zitate spielen keine Rolle. Wenn Sie nicht möchten, dass ein Stored Proc mindestens Ihren SQL-Text mit Parametermarkern erstellt, verwenden Sie dazu SQL-Parameter.
Ich speichere und bearbeite ein Feld in einer Datenbank mit einer langen Folge von einem oder mehreren Sätzen. Wenn ich ein einzelnes Anführungszeichen in das Textfeld einfüge und es speichern möchte, löst es eine Ausnahme aus "Falsche Syntax in der Nähe von 'l'. Ungeschlossenes Anführungszeichen nach der Zeichenfolge ''. " Gibt es eine Idee, das zu vermeiden?
BEARBEITEN: Die Abfrage lautet:
%Vor%In MSSQL können Sie Ihre Anführungszeichen verdoppeln:
%Vor%Wenn Sie ein einzelnes Anführungszeichen in ein SQL-Feld einfügen möchten, müssen Sie es mit einfachen Anführungszeichen
zurückgeben %Vor%Dies ist für SQL Server.
Es ist schwierig, Ihnen eine spezifische Antwort zu geben, da Sie nicht die Datenbank oder Anwendungssprache auflisten, die Sie verwenden.
Sie müssen Ihr SQL dynamisch erstellen, und das Zitat innerhalb des Stems wird als das Ende der Zeichenkette interpretiert. Abhängig von der verwendeten Datenbank müssen Sie die einfachen Anführungszeichen innerhalb jeder Zeichenfolge, die Sie in Ihrem SQL-Befehl verwenden möchten, umgehen. Dies kann durch Drucken der Abfrage angezeigt werden, bevor Sie versuchen, es auszuführen.
Sie erwähnen nicht die Anwendung, von der Sie die Datenbank aufrufen, aber wenn Sie Ihren Befehl erstellen, müssen Sie den Befehl FIX_QUOTES () verwenden, den Sie schreiben oder der von Ihrer Sprache bereitgestellt wird:
%Vor%Diese Art der dynamischen Abfrage ist sehr einfach für einen SQL-Injection-Angriff . Ich würde es tun empfehlen, die Datenbank mit einer gespeicherten Prozedur oder mit einer Parameterliste aufzurufen.
Wie einige bereits gesagt haben, wird das Hinzufügen eines zusätzlichen Zitats den Trick bewirken. Ich kann bestätigen, dass dies auch für Oracle der Fall ist (andere haben diese Antwort als gültig für MSSQL und SQL Server angegeben). Ich denke, dass die Verwendung gespeicherter Prozeduren hierfür zu viel ist.
Schreiben Sie ein gespeichertes Produkt für die Feldbearbeitung und verwenden Sie SQL-Parameter, um den Wert zu speichern. Zitate spielen keine Rolle. Wenn Sie nicht möchten, dass ein Stored Proc mindestens Ihren SQL-Text mit Parametermarkern erstellt, verwenden Sie dazu SQL-Parameter.
Es ist schwierig, Ihnen eine spezifische Antwort zu geben, da Sie nicht die Datenbank oder Anwendungssprache auflisten, die Sie verwenden.
Sie müssen Ihr SQL dynamisch erstellen, und das Zitat innerhalb des Stems wird als das Ende der Zeichenkette interpretiert. Abhängig von der verwendeten Datenbank müssen Sie die einfachen Anführungszeichen innerhalb jeder Zeichenfolge, die Sie in Ihrem SQL-Befehl verwenden möchten, umgehen. Dies kann durch Drucken der Abfrage angezeigt werden, bevor Sie versuchen, es auszuführen.
Sie erwähnen nicht die Anwendung, von der Sie die Datenbank aufrufen, aber wenn Sie Ihren Befehl erstellen, müssen Sie den Befehl FIX_QUOTES () verwenden, den Sie schreiben oder der von Ihrer Sprache bereitgestellt wird:
%Vor%Diese Art der dynamischen Abfrage ist sehr einfach für einen SQL-Injection-Angriff . Ich würde es tun empfehlen, die Datenbank mit einer gespeicherten Prozedur oder mit einer Parameterliste aufzurufen.
Wie einige bereits gesagt haben, wird das Hinzufügen eines zusätzlichen Zitats den Trick bewirken. Ich kann bestätigen, dass dies auch für Oracle der Fall ist (andere haben diese Antwort als gültig für MSSQL und SQL Server angegeben). Ich denke, dass die Verwendung gespeicherter Prozeduren hierfür zu viel ist.
Tags und Links sql dynamic-sql