gon: Perl/MySQL Apostroph Problem

Hallo zusammen,

ich versuche meine MP3 Sammlung mit Hilfe eines Perl Scripts (MP3::Tag) in eine MySQL Datenbank einzulesen. Das ganze klappt soweit sehr gut, es gibt nur ein Problem.

Ich speichere die einzelnen MP3Tags in Variablen und füge am Anfang und am Ende jeweils ein Apostroph hinzu, damit ich die Werte anschließend in die Datenbank schreiben kann. Wenn jetzt ein Tag selbst ein Apostroph beinhaltet (z.b. title= Don't Cry) erkennt MySQL dieses natürlich als das Ende des String und schneidet hier ab. Das ganze endet dann in einem SQL Syntax Error. Der Datentyp des SQL-Feldes ist VARCHAR.

Hat jemand eine Idee, wie ich der Datenbank klarmachen kann wo der Sting eigentlich aufhört?

Danke für eure Hilfe Gruß, gon

Code Beispiel: ... ($title, $track, $artist) = $mp3->autoinfo(); ... $artist = "'$artist'"; $title = "'$title'"; $track = "'$track'"; ...

Fehler: DBD::mysql::st execute failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 't Say It's Over' and track = '04' and year = '1994'' at line 1



OS: Windows XP Perl: 5.10.0.1003 MySQL: 5.0.51b-community-nt

  1. Wenn jetzt ein Tag selbst ein Apostroph beinhaltet (z.b. title= Don't Cry) erkennt MySQL dieses natürlich als das Ende des String und schneidet hier ab. Das ganze endet dann in einem SQL Syntax Error.

    Sonderzeichen werden gequotet, also hier "don't"
    O>b es unter Perl dazu eine passende Funktion gibt, weiss ich nicht, da ich schon länger nichts mehr mit Perl und Mysql gemacht hab

    Der Datentyp des SQL-Feldes ist VARCHAR.

    Völlig wurscht in diesem Fall, da der "Fehler" schon passiert, bevor die Daten im Datenfeld landen.

    1. Danke euch.
      Ich markiere die ' in den Strings jetzt um sie später leichter wieder ersetzen zu können.

      Danke schön.

      Gruß, gon

      1. Ich markiere die ' in den Strings jetzt um sie später leichter wieder ersetzen zu können.

        Das ist Unsinn und gefährlich, benutze lieber das was dir hotti vorgeschlagen hat.

        Struppi.

        1. hi,

          Ich markiere die ' in den Strings jetzt um sie später leichter wieder ersetzen zu können.

          Das ist Unsinn und gefährlich, benutze lieber das was dir hotti vorgeschlagen hat.

          Danke Struppi!

          Viele Grüße,
          Hotti

      2. Ich markiere die ' in den Strings jetzt um sie später leichter wieder ersetzen zu können.

        Wieso das, wenn es Funktionen gibt, die sowas automatisch und sicher bewerkstelligen?

  2. hi,

    Hat jemand eine Idee, wie ich der Datenbank klarmachen kann wo der Sting eigentlich aufhört?

    Probier mal:
    $quoted_string = $dbh->quote($string);

    Oder Platzhalter in einem prepared Statement VALUES(?,?,?) damit wird automatisch ge-quoted bei einem

    $sth->execute($title, $author, $date);

    Viele Grüße,
    Hotte