Hi, heute eine Frage zu mysqli_real_escape_string(). Damit habe ich bisher eher sehr selten zu tun gehabt. Die Frage ist, wenn alle Daten bei INSERT INTO oder UPDATE per mysqli_real_escape_string() in die Datenbank geschrieben wurden/werden, (wobei das "wurden" nicht 100 pro sicher ist), wie werden dann die "escapes" bei einem SELECT wieder valide de-escaped? Reicht da ein stripslashes(nl2br($variable))? Oder wie macht Ihr das so?
Ankündigung
Einklappen
Keine Ankündigung bisher.
mysqli_real_escape_string() de-escapen?
Einklappen
Neue Werbung 2019
Einklappen
X
-
wie werden dann die "escapes" bei einem SELECT wieder valide de-escaped?
Da gehts ja um den Kontextwechsel und nichts anderes.The string "()()" is not palindrom but the String "())(" is.
Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
PHP.de Wissenssammlung | Kein Support per PN
-
Zitat von hausl Beitrag anzeigen
Gar nicht, dann stehen die Daten korrekt in der DB und das ist auch gut so.
Da gehts ja um den Kontextwechsel und nichts anderes.
EDIT: das Forum hier ist zugleich Beweis: Die Backslashes vor den einzelnen " wurden in meinem Text entfernt, aber die \r\n nicht!
EDIT: ach, ich hab einen Denkfehler wegen den Slashes... \\r\\n \" ... kleine kurze Verwirrung. Also wäre meine Frage. Wann/Wo werden die Escape-Slashes bei einem SELECT entfernt?
Ich muss meine Frage spezifizieren. In der diesbezüglichen Datenbank stehen \r\n (exakt so, mit einem Slash) und \" (exakt so, mit einem Slash). In der doc von mysqli_real_escape_string() steht:
Characters encoded are NUL (ASCII 0), \n, \r, \, ', ", and Control-Z.
edit: man muss die " bei jedem edit in diesem Forum erneut mit zwei Slashes escapen, weil die gelöscht werden...
Kommentar
-
Zitat von psoido Beitrag anzeigenDa muss ich meine Frage wohl etwas ausweiten. Also, wenn die Daten (angenommen) alle mit mysqli_real_escape_string() in die DB geschrieben wurden
Zitat von psoido Beitrag anzeigendann benötigt es bei einem SELECT ebenso ein mysqli_real_escape_string() bei der abzufragenden Data (bei z.B. WHERE), damit diese auch gefunden wird, weil die Data ist ja in der DB mit Escapes gespeichert, oder etwa nicht?
Zitat von psoido Beitrag anzeigenZudem bin ich ein wenig verwirrt, weil ein nl2br() notwendig ist um die \r\n in <br> umzuwandeln
Zitat von psoido Beitrag anzeigenDa wäre meine Frage: In welchem Schritt verschwinden die Slashes (Escapes)?
Zitat von psoido Beitrag anzeigenohne dass die \r\n verschwinden?
Zitat von psoido Beitrag anzeigendas Forum hier ist zugleich Beweis: Die Backslashes vor den einzelnen " wurden in meinem Text entfernt, aber die \r\n nicht!
Kommentar
-
Hallo hellbringer, ich hatte noch ein Edit in meinem letzten Beitrag.
Zitat von hellbringer Beitrag anzeigenDas ist schon mal falsch. mysqli_real_escape_string() ist nur für die Übertragung zur Datenbank relevant. In die Datebank wird selbstverständlich der Wert ohne Escaping geschrieben.
Zitat von hellbringer Beitrag anzeigen\r und \n verschwinden nicht. Die bleiben immer da.
Kommentar
-
... Editieren meines letzten Beitrags erspar ich mir die Mühe wegen dem Escapen...
Anmerkung:
Kann es sein ... Das komplette System muss resetet werden! Keine Alphabet-Buchstaben für Newline, Rücklauf, etc. verwenden. Dafür gibt es extra Zeichen, wie ¶, siehe
https://de.wikipedia.org/wiki/Absatzzeichen
Mit der Verwendung dieses Zeichens wäre die Situation nicht so missverständlich. Das Zeichen kann gerne auf die Tastatur, aber bitte nicht so wie das @.
Kommentar
-
Zitat von psoido Beitrag anzeigenKann es sein ... Das komplette System muss resetet werden! Keine Alphabet-Buchstaben für Newline, Rücklauf, etc. verwenden. Dafür gibt es extra Zeichen, wie ¶
- 1 Likes
Kommentar
-
Zitat von erc Beitrag anzeigenWie speichert man deiner Meinung dann ein ¶ Zeichen in der Datenbank? Solange Anweisungen/Steuerzeichen und Daten in einem String transportiert werden, hast du immer das Problem, dass Daten maskiert werden müssen.
Kommentar
-
Zitat von psoido Beitrag anzeigenIn meiner DB als *.sql Datei im Texteditor sind \r\n und " je mit einem Slash gespeichert.
Zitat von psoido Beitrag anzeigenAlso wurde wohl bei " das Escaping in die DB gespeichert?
Zitat von psoido Beitrag anzeigenSeltsamerweise verschwinden diese Escape-Slashes bei " bei einem SELECT, aber bei r und n natürlich nicht. Wie das?
Zitat von psoido Beitrag anzeigenDas ist das was mich verwirrt, weil einmal so und einmal anders, also der Unterschied bei \r\n und ". Kann es sein, dass es da eine missverständliche Situation gibt?
Im SQL-Code wird SQL-Escaping verwende.
Im HTML-Code wird HTML-Escaping verwendet.
Ende der Geschichte.
Zitat von psoido Beitrag anzeigenAlso eigentlich wäre eine Newline ein n und ein Rücklauf ein r (ohne Slashes).
Kommentar
-
Zitat von hellbringer Beitrag anzeigen
Im SQL-Code wird SQL-Escaping verwende.
Im HTML-Code wird HTML-Escaping verwendet.
Den lass ich auch noch hier: https://php-de.github.io/jumpto/kontextwechsel/[COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
[URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]
Kommentar
-
Sollte mysqli_real_escape_string() auch bei SELECT verwendet werden?
Ich habe da nur was zum Vorgänger mysql_real_escape_string() gefunden. Das wurde auch bei SELECT verwendet. Ist das eher problematisch oder muss/sollte das sogar?
PS: hellbringer. so ein Link zum verweisenden Thema im geschlossenen ist ganz praktisch. Dann weiß ein jeder welches Thema der MOD mit "doppelt" meint, und das in alle Zukunft.
Kommentar
-
Zitat von psoido Beitrag anzeigenSollte mysqli_real_escape_string() auch bei SELECT verwendet werden?
Zitat von psoido Beitrag anzeigenso ein Link zum verweisenden Thema im geschlossenen ist ganz praktisch. Dann weiß ein jeder welches Thema der MOD mit "doppelt" meint, und das in alle Zukunft.
- 1 Likes
Kommentar
-
So ist das also. Danke hellbringer für die nun unmissverständliche Antwort!
Das mit \r und \n verstehe wer will. Im *.sql dump sind \r \n und \" hinterlegt. Müsste es dann aber nicht \\r \\n und \" sein, wenn \r und \n escaped werden würden? Aber da ist dann wieder der Unterschied, dass einerseits das Escaping nur für die Datenübertragung benutzt wird und nicht im Speicher. Dann haben also die \" im *.sql dump gar nichts mit dem mysqli_real_escape_string() zun tun, sondern sind dort wegen *.sql dump-spezifischen Dingen. Da muss man erstmal drauf kommen...
Kommentar
-
Zitat von psoido Beitrag anzeigenDas mit \r und \n verstehe wer will. Im *.sql dump sind \r \n und " hinterlegt. Müsste es dann aber nicht \\r \\n und " sein, wenn \r und \n escaped werden würden?
Code:mysql> CREATE TEMPORARY TABLE test ( value VARCHAR(255) ); Query OK, 0 rows affected (0.03 sec) mysql> INSERT INTO test VALUES ("foo\nbar\nbaz"); Query OK, 1 row affected (0.00 sec) mysql> SELECT value FROM test; +-------------+ | value | +-------------+ | foo bar baz | +-------------+ 1 row in set (0.00 sec)
Kommentar
Kommentar