• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

"mysql_real_escape_string" funktioniert nicht

Kirschtomate

New member
Hallo,

ich stehe leider gerade etwas auf der Leitung. Folgende Abfrage funktioniert tadellos:

PHP:
$abfrage = "select * from table where name like '%$name%'";

Mit mysql_real_escape_string gibt's aber Probleme:

PHP:
$abfrage = "select * from table where name like mysql_real_escape_string('%$name%')";

Notice: Trying to get property of non-object in...

Kann mir jemand auf die Sprünge helfen? Vielen Dank!
 
Ich habe folgendes versucht, bekomme aber die gleiche Fehlermeldung:

PHP:
$abfrage = "select * from table where name like " . mysql_real_escape_string('%$name%') . "and street like '%$street%'";

In einem anderen Skript habe ich folgenden Code, der funktioniert:

PHP:
$abfrage = "select * from login where benutzer = '$benutzer' and passwort = sha1('$passwort')";
 
PHP:
$abfrage = "select * from table where name like " . mysql_real_escape_string("%$name%") . "and street like '%$street%'";
double quotes statt single quotes damit die variable übersetzt wird
 
Wie verhext, es funktioniert noch immer nicht:

"Notice: Trying to get property of non-object in..."

Warum gibt es bei sha1 keine Probleme? Der Syntax sollte doch der gleiche sein.
 
in dem code den du hier gepostet hast greifst du auf keine objekte zu, also hat der fehler hiermit nichts zu tun.

sha1 funktioniert nur aus Zufall: es wird nicht die php-funktion sha1() aufgerufen sondern das "sha1" wird mit in der query gesendet und mysql kennt diese funktion auch - d.h. dein mysql macht hier sha1, nicht das PHP.
Und die query so wie du sie hast sollte mit einem syntax error abbrechen da du quotes vergisst.
Immer wenn du MySQL queries absetzt solltest du das so machen: mysql_query($sql) OR die(mysql_error()) - dann siehst du wenn was schiefgeht.

So sollte deine query funktionieren:
$abfrage = sprint("SELECT * FROM `table` WHERE `name` LIKE '%%%s%%' AND `street` LIKE '%%%s%%'", mysql_real_escape_string($name), mysql_real_escape_string($street));
 
sha1 funktioniert nur aus Zufall: es wird nicht die php-funktion sha1() aufgerufen sondern das "sha1" wird mit in der query gesendet und mysql kennt diese funktion auch - d.h. dein mysql macht hier sha1, nicht das PHP.

Das kling verständlich. Folgender Code funktioniert (ohne %):

$abfrage = "select * from table where name like '" . mysql_real_escape_string($name) . "' and street like '%$street%'";

Mit Jokerzeichen wird es dann ein Eck komplizierter :/

So sollte deine query funktionieren:
$abfrage = sprint("SELECT * FROM `table` WHERE `name` LIKE '%%%s%%' AND `street` LIKE '%%%s%%'", mysql_real_escape_string($name), mysql_real_escape_string($street));

Danke, nur eine Frage: Womit muss ich denn Google füttern, um diese Lösung zu verstehen (bin neu in PHP/MySQL)?
 
sprintf
... find' ich aber für das Problem wenig hilfreich - ich bau mir da den String einfach aus den Einzelteilen zusammen:
PHP:
$abfrage = "select * from table where name like '%" . mysql_real_escape_string($name) . "%'";
 
sprintf
... find' ich aber für das Problem wenig hilfreich - ich bau mir da den String einfach aus den Einzelteilen zusammen:
PHP:
$abfrage = "select * from table where name like '%" . mysql_real_escape_string($name) . "%'";

Danke, jetzt geht mir ein Licht auf! Ansonsten sollte es auch so funktionieren, oder?

PHP:
$name = mysql_real_escape_string($name);
$abfrage = "select * from table where name like '%$name%'";
 
$abfrage = sprint("SELECT * FROM `table` WHERE `name` LIKE '%%%s%%' AND `street` LIKE '%%%s%%'", mysql_real_escape_string($name), mysql_real_escape_string($street));
Ähhhm, also bevor man solche Konstrukte baut, sollte man doch lieber Prepared Statements verwenden. Das ist sauberer, sicher, und hat den Vorteil, dass ein Statement-Cache zum Einsatz kommen könnte (falls PHP und das RDBMS das unterstützen).
 
Zurück
Oben