So fügen Sie einem dynamischen SQL-Befehl Zitate hinzu?

8

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%     
Ahmad Farid 14.07.2009, 11:10
quelle

6 Antworten

11
___ answer1124732 ___

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.

    
___ qstntxt ___

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%     
___ answer1124740 ___

In MSSQL können Sie Ihre Anführungszeichen verdoppeln:

%Vor%     
___ answer1124738 ___

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.

    
___ answer1125007 ___

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.

    
___ answer1125232 ___

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.

    
___ tag123sql ___ Structured Query Language (SQL) ist eine Sprache für die Abfrage von Datenbanken. Fragen sollten Codebeispiele, Tabellenstruktur, Beispieldaten und ein Tag für die verwendete DBMS-Implementierung (z. B. MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 usw.) enthalten. Wenn sich Ihre Frage nur auf ein bestimmtes DBMS bezieht (verwendet bestimmte Erweiterungen / Funktionen), verwenden Sie stattdessen das Tag des DBMS. Antworten auf mit SQL gekennzeichnete Fragen sollten den ISO / IEC-Standard SQL verwenden. ___ qstnhdr ___ So fügen Sie einem dynamischen SQL-Befehl Zitate hinzu? ___ tag123dynamicsql ___ Dynamic SQL ist eine Technik, die SQL (Structured Query Language) verwendet, deren Hauptunterschied zu herkömmlichem SQL darin besteht, dass SQL dynamisch SQL-Anweisungen zur Laufzeit erstellen kann, was die automatische Erzeugung und Ausführung von Programmanweisungen erleichtert. ___
John Saunders 14.07.2009, 12:40
quelle
6

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.

    
TheTXI 14.07.2009 11:12
quelle
3

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.

    
n8wrl 14.07.2009 11:12
quelle
1

In MSSQL können Sie Ihre Anführungszeichen verdoppeln:

%Vor%     
cjk 14.07.2009 11:13
quelle
1

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.

    
KM. 14.07.2009 12:18
quelle
0

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.

    
awe 14.07.2009 13:02
quelle

Tags und Links