Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
PHP/Mysql: "+" absp. in Tabelle ohne Sql-Error [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
PHP/Mysql: "+" absp. in Tabelle ohne Sql-Error


 
Blaster
26-11-2001, 17:23 
 
Hi folks,

ich habe folgendes Problem:
Ich will ein Bedingungsquery
$query=" OR field='foo' OR...";
in einer MySql-Tabelle abspeichern, um Bedingung nicht wieder erneut bilden zu müssen. Der Query:
sql="UPDATE INTO foo SET field2='$query' WHERE foo2";
Beim Ausführen von mysql_db_query($db, $sql) erfolgt ein
SQl-Error, weil ZWEI ineinander verschachtelte ' im Query gebildet werden:
You have an error in your SQL syntax near '1100001' OR thema='Kritik'' WHERE kunde_id='1100002'' at line 1
Wer kennt eine elegante Methode ohne die ' zu ersetzen?

thanks for help

Blaster

 
Sky
26-11-2001, 18:22 
 
Erstmal muss es heißen:

sql="UPDATE foo SET field2='$query' WHERE foo2";

Und dann vorher maskierst du die Variable, die Ärger macht:

$query = addslashes($query);
oder auch nach Belieben
$query = mysql_escape_string($query);

 
Blaster
26-11-2001, 18:57 
 
To Sky,

natürlich hast du recht. INTO war ein Tippfehler der "ersten INSERT Variante".

Dennoch dein Tipp mit
$Query = mysql_escape_string($Query);
war ein voller Satzgewinn.

great shot

Blaster

 
Blaster
29-11-2001, 19:01 
 
Auf einer Mail-Anfrage hin:

Meine Problem war, dass bei
....SET fieldq='$Query' ....
und den
$query="(feld1='foo' AND feld2='foo2') OR feld3='...";
den sql-string=".... SET fieldq='(feld1='foo' AND ...' ...
bildet.
PHP/MySQL definiert dann den Feldinhalt fieldq als
fieldq='(feld1=',
weil mit dem letzten ' der Inhaltsbereich abgeschlossen ist.
Der verbleibene Rest foo' AND ...' wird dann als Bestandteil des SQL`s interpretiert und verursacht sofort einen Fehler. Also mußte ich die ' des $Query maskieren, wie Sky sagte, um verständlich zu machen, dass Sie Bestandteil des Feldinhaltes sind.
Der Befehl
$Query = mysql_escape_string($Query)
wandelt die ' in \' um:
$query="(feld1=\'foo\' AND feld2=\'foo2\') OR feld3=\'...";
In der Datenbank wird $Query aber wieder als
$Query="(feld1='foo' AND feld2='foo2') OR feld3='...";
abgespeichert, den ich nach Belieben aus der DB abrufen kann, um Ihn als Bedingung an weitere Abfragen verwenden:
$sql ="select bla,bla FROM bla WHERE $Quere";
Der Vorzug: Um jetzt diese Abfrage vorzunehmen, muß ich die komplexen Vorgänge, die $Query bilden nicht mehr durchlaufen. Das hat Sky schnell und elegant gelöst:
___________________________
Wirklich gute Leute hier:
Sky,schmalle,Titus,JoelH u.a.a.

[Editiert von Blaster am 29-11-2001 um 20:39]

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 14:56 Uhr.