PHP/Mysql: "+" absp. in Tabelle ohne Sql-Error

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PHP/Mysql: "+" absp. in Tabelle ohne Sql-Error

    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
    Yuppi, endlich Elite ...

  • #2
    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);

    CAT Music Files

    Kommentar


    • #3
      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
      Yuppi, endlich Elite ...

      Kommentar


      • #4
        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]
        Yuppi, endlich Elite ...

        Kommentar

        Lädt...
        X