Wie slashes in MySQL

Alles, was PHP betrifft, kann hier besprochen werden.

Wie slashes in MySQL

Postby yosh » 15. May 2007 13:44

Hallo zusammen,

ich bin da etwas durcheinander bzgl der Darstellung von Slashes in MySQL.
So weit ich weiss wird ein \ durch \\ dargestellt.

Wenn ich jedoch nun mitHilfe von PHP folgendes in die DB einfügen will

INSERT INTO XXX (a,b) VALUES ('a\\', 'b\\\\');


Ich schätze mal es liegt an PHP da in PHP ein \ durch \\dargestellt wird.
Oder?

Kann iuch das irgendwie umgehen?
Oder liegt es gar nicht dadran?
Muss ich 4 slahes benutzen wenn ich php benutze?

gruss yosh
yosh
 
Posts: 8
Joined: 06. December 2006 12:51

Postby Wiedmann » 15. May 2007 14:02

Wenn ich jedoch nun mit Hilfe von PHP folgendes in die DB einfügen will
Code: Select all
INSERT INTO XXX (a,b) VALUES ('a\\', 'b\\\\');

Diese eine Zeile stellt leider keinen gültigen PHP-Code dar...


Ansonsten:
- In der PHP Scriptdatei escaped man Backslashs in Strings nach den Regeln die für PHP gültig sind. Wenn du einen Backlash brauchst sind es im Script 2, wenn du 2 Backslash brauchst, sind es im Script 4.


Oder als Hilfe:
Wenn du das obige SQL in ein echo() packsts, muss genau das rauskommen was MySQL erwartet.
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby yosh » 15. May 2007 14:32

Diese eine Zeile stellt leider keinen gültigen PHP-Code dar...

PHP Code sieht so aus (nur Ausschnitt):
$a= "\\2slashes";
$b= "\1slashes";
$c= "\\\3slashes";
$d= "\\\\slashes";

/* Anfrage bilden */
$sql = "INSERT INTO tabelle (a,b,c,d)

VALUES ('$a', '$b', '$c', $d')";

/* Anfrage abschicken */
$result = mysql_query ($sql)


Als Eintrag in DB erhalte ich:
2slashes, slash, slashes, \slashes

Als direkte Ausgabe der variablen in HTML erhalte ich jedoch
\2slashes, slash, \ slashes, \\slashes

Sprich in SQL vbekomme ich für 4 \\\\ nur 1 \.

frisst der PHP Parser die backslashes bevor er es an die SQl DB übergibt?
Oder wie kann ich es errech dass mir nur 2 slashes ausreichen (dies wäre nähmlich sehr wichtig.

@Wiedmann habe es mit dem echo versucht. Es werde tatsächlich die häjfte der slashes gefressen von PHP.
WIe kann ich dass denn nun machen dass ich für HTML ausgabe und DB EIntrag genau so viele backslashes verwenden kann.

gruss Yoshi
yosh
 
Posts: 8
Joined: 06. December 2006 12:51

Postby Wiedmann » 15. May 2007 14:38

@Wiedmann habe es mit dem echo versucht. Es werde tatsächlich die häjfte der slashes gefressen von PHP.

Was ja logisch ist. Es soll ja nicht das Escapezeichen selbst ausgegeben werden, nur das Zeichen das jeweils escaped wird.
Aber genau das was echo() ausgibt, wird zu MySQL geschickt.
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Makuro » 23. May 2007 12:46

alternativ kannst du auch über den befehl addslashes() arbeiten.

wäre bei deinem Code dann so:
Code: Select all
PHP Code sieht so aus (nur Ausschnitt):
$a= addslashes("\\2slashes");
$b= addslashes("\1slashes");
$c= addslashes("\\\3slashes");
$d= addslashes("\\\\slashes");

/* Anfrage bilden */
$sql = "INSERT INTO tabelle (a,b,c,d)

VALUES ('$a', '$b', '$c', $d')";

/* Anfrage abschicken */
$result = mysql_query ($sql)



jetzt solltest du die \ korrekt zurückbekommen.
addslashes() bearbeitet jedoch nicht nur die \ sondern auch " und ', was insofern praktisch ist, wenn du freien Text zur Eingabe erhälst, und dieser ein ' beinhaltet, bricht dir deine SQL Anweisung nicht gleich ab.

z.B.

Code: Select all
$a= addslashes("\\2slashes");
$b= addslashes("\1sla'shes");
$sql = "INSERT INTO tabelle (a,b)

VALUES ('$a', '$b')";

/* Anfrage abschicken */
$result = mysql_query ($sql)

würde problemlos durchlaufen, während ohne addslashes du eine Fehlermeldung zurückbekommst die ungefähr so aussieht:

You have an error in your SQL syntax near: 'shes')""

Grüße
jedes Kind braucht Großeltern!
Es sind die einzigen Personen die bezeugen können , das die eigenen Eltern nicht besser waren.
Makuro
 
Posts: 17
Joined: 23. May 2007 12:23


Return to PHP

Who is online

Users browsing this forum: No registered users and 15 guests