Mysql + php mit Sonderzeichen wie '(Apostroph) und' (Anführungszeichen)

8

Ich habe eine Weile mit einem kleinen Problem zu kämpfen. Es ist seit Jahren dort, aber es war nur ein lästiges Problem und kein ernstes, und ich habe gerade daran gearbeitet. Aber jetzt möchte ich herausfinden, ob mir jemand helfen kann. Ich habe etwas googlen gemacht, aber keinen Erfolg.

Wenn ich einen Formularpost von einem HTML-Textbereich in einer PHP-Datei wie folgt mache:

%Vor%

und natürlich gibt es einen Absenden-Button und so weiter.

Der Wert ist das Problem: <a href="http://google.com">google's site</a> Der Wert des Textbereichs hat sowohl "(Anführungszeichen) als auch" (Apostroph).

Um dies in einer mysql_database zu speichern, mache ich das:

%Vor%

Und jetzt bekomme ich den mysql Fehler:

  

Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MySQL-Serverversion entspricht, nach der richtigen Syntax, um die near-Site in Zeile 1 zu verwenden.

    
Daniel Rufus Kaldheim 11.01.2011, 16:23
quelle

6 Antworten

17

Ihre SQL-Zeichenfolge lautet:

%Vor%

Was keine gültige Aussage ist. Wie Nanne schrieb, entkomme die Zeichenfolge zumindest mit mysql_real_escape_string: Ссылка

Und lesen Sie über SQL-Injektion Ссылка

Denken Sie ein bisschen nach: Wenn jemand dies postet: $_POST['text'] mit Wert: ');delete from table;....

Sie können sich von Ihren Daten verabschieden:)

Immer Filter / Escape-Eingabe!

EDIT: Ab PHP 5.5.0 sind mysql_real_escape_string und die mysql-Erweiterung veraltet. Bitte verwenden Sie stattdessen mysqli extension und mysqli :: escape_string function

    
Peter Porfy 11.01.2011, 16:30
quelle
9

Verwenden Sie immer mindestens mysql_real_escape_string, wenn Sie vom Benutzer bereitgestellte Werte in die Datenbank einfügen. Sie sollten sich die Bindungsparameter oder mysqli ansehen, damit Ihre Abfrage zu:

wird %Vor%

Und? würde nach der Bereinigung der Eingabe durch den tatsächlichen Wert ersetzt.

In Ihrem Fall verwenden Sie:

%Vor%

Lesen Sie SQL Injection. Es lohnt sich, sofort so schnell wie möglich zu machen!

    
methodin 11.01.2011 16:27
quelle
3

Entkomme die Zeichenfolge: D

Ссылка

    
Nanne 11.01.2011 16:26
quelle
2

Sie können die Funktion addslashes () verwenden. Es zitieren Zeichenfolge mit Schrägstrichen. Daher wird es für Sie sehr nützlich sein, wenn Sie in Ihrem Feld einen Apostroph einfügen.

%Vor%     
Hemi 26.09.2012 05:24
quelle
1

Verwenden Sie anstelle der alten mysql * -Funktionen PDO und schreiben Sie parametrisierte Abfragen - Ссылка

    
Stephen 11.01.2011 16:27
quelle
0

Ich habe mich auch über Charaktere gekümmert, als ich Daten in MySQL aktualisiert habe.

Aber ich kam schließlich zu einer besseren Antwort, Hier ist:

%Vor%

Und wenn Sie Ihre Datenbank aktualisieren, aktualisiert das System sie nur, wenn Sie die MySQL REAL Escape-Zeichenfolge verwenden. Hier:

%Vor%

Dann werden Sie die Abfrage sicher aktualisieren.

%Vor%

Weitere Informationen finden Sie in MYSQL_REAL_ESCAPE_STRING

Hoffnung, die hilft

    
Micheal P. 09.10.2015 09:48
quelle

Tags und Links