James: Binärfile will nicht in die Datenbank

Hallöchen Forum,

es sollen Binärdaten in eine MS-SQL Datenbank. Der Spaltentyp ist Image.
Soweit alles klar, nur krieg ich das File mit php aus irgendeinem Grunde nicht in die Datenbank.

Der Code:

mssql_connect("der.ser.ver","name","passwort");
mssql_select_db("diedatenbank");

$groesse = filesize("datei.tmp");
$daten = addslashes(fread(fopen("datei.tmp", "rb"), $groesse));

$result=mssql_query("INSERT INTO objekttabelle (objekt) VALUES '$daten'");

mssql_close();

Is natürlich verkürzt und stark vereinfacht.
Die Fehlermeldung ist: falsche Syntax in der Nähe von... Die ist aber nur falsch, weil sich im Code der datei.tmp jede Menge Sonderzeichen verbergen und er denkt, es findet was unerhörtes statt und bricht die Query ab.

Kann mir jemand sagen, wie ich das File evtl. maskieren kann oder muss, damit es ganz durch den Parser geht?

Vielen Dank und Grüesslie,

James.

  1. hallo james,

    ich zitier hier mal einen post aus nem anderen forum:

    ----zitat----
    Bilder stellen Binärdaten dar. Um Binärdaten in einer MySQL DB zu speichern verwendet man die Dateitypen CHAR oder VARCHAR mit dem Attribut BINARY. Das BINARY Atribut ist wichtig! Es bewirkt, dass bei der Sotierung, Groß/Kleinschreibung beachtet wird.

    Im übrigen empfehle ich die Bilder NICHT in der DB zu speichern, sondern extern als Datein auf der Festplatte und nur den "Link" in der DB zu speichern. Dies macht die DB wesentlich schneller!
    ----zitat ende----

    gruß
    maikel

    1. Vielen Dank,

      1. Es handelt sich um eine MS-SQL (größer ging nicht) - Datenbank
      der Datentyp ist hier IMAGE
      2. Den Glaubenskrieg Binärdaten rein oder nicht kenne ich.
      3. Das war eine konkrete Frage, ich habe mich bereits bei den MySQL-Postings umgeschaut.

      Vielleicht hatte ja jemand mal ein ähnliches Problem und kann helfen.

      Danke und Grüesslie.

      hallo james,

      ich zitier hier mal einen post aus nem anderen forum:

      ----zitat----
      Bilder stellen Binärdaten dar. Um Binärdaten in einer MySQL DB zu speichern verwendet man die Dateitypen CHAR oder VARCHAR mit dem Attribut BINARY. Das BINARY Atribut ist wichtig! Es bewirkt, dass bei der Sotierung, Groß/Kleinschreibung beachtet wird.

      Im übrigen empfehle ich die Bilder NICHT in der DB zu speichern, sondern extern als Datein auf der Festplatte und nur den "Link" in der DB zu speichern. Dies macht die DB wesentlich schneller!
      ----zitat ende----

      gruß
      maikel

      1. Hallo James,

        1. Den Glaubenskrieg Binärdaten rein oder nicht
          kenne ich.

        Das ist kein Glaubenskrieg. Das sind anerkannte
        Fakten. Manche Leute haben nur nicht den
        Sachverstand, das einzusehen.

        Gruesse,
         CK

        --
        http://cforum.teamone.de/
        http://wishlist.tetekum.de/
        If God had meant for us to be in the Army, we would have been born with green, baggy skin.
        1. Na toll, und jetzt?

          was ist denn mit der referenziellen Integrität?
          Es soll ja auch DBMS geben, wo es nicht auf Performance, sondern auf die Integrität der Daten ankommt. Soviel zum Thema Sachverstand, Kollege Knäckebrot.

          Hat vielleicht trotzdem jemand eine Idee? Die Frage war, wie Binärdaten bei einer SQL-Abfrage(INSERT)in php so maskiert werden können, dass der Parser nicht abbricht. Addslashes funktioniert nicht. Vielleicht gibt es ja in T-SQL eine Entsprechung?

          Danke und Grüesslie.

          Belehrungen kann ich nicht brauchen.

          Hallo James,

          1. Den Glaubenskrieg Binärdaten rein oder nicht
            kenne ich.

          Das ist kein Glaubenskrieg. Das sind anerkannte
          Fakten. Manche Leute haben nur nicht den
          Sachverstand, das einzusehen.

          Gruesse,
          CK

          1. Hallo James,

            was ist denn mit der referenziellen Integrität?

            Warum sollte die in Gefahr gebracht werden?

            Es soll ja auch DBMS geben, wo es nicht auf
            Performance, sondern auf die Integrität der
            Daten ankommt.

            Die Integritaet der Daten ist dadurch, dass du
            Dateien auf die Festplatte auslagerst, bestimmt
            nicht in Gefahr gebracht. Wenn doch, hast du was
            falsch gemacht.

            Hat vielleicht trotzdem jemand eine Idee? Die
            Frage war, wie Binärdaten bei einer
            SQL-Abfrage(INSERT)in php so maskiert werden
            können, dass der Parser nicht abbricht.

            Das sagt dir das Handbuch deines DBMS. Dort sollte
            genau beschrieben stehen, welche Zeichen wie
            maskiert werden muessen.

            Belehrungen kann ich nicht brauchen.

            Ich dachte, wegen Belehrungen bist du hier? Nicht?
            Oh, gut, sag mir das das naechste mal vorher,
            dann spare ich mir Antworten.

            Gruesse,
             CK

            --
            http://cforum.teamone.de/
            http://wishlist.tetekum.de/
            If God had meant for us to be in the Army, we would have been born with green, baggy skin.
            1. Hallo Christian,

              ok, Informatik für Anfänger und solche, die den <zitat Kruse>nötigen Sachverstand</zitat> nicht haben: Die referentielle Integrität ist nur dann gewährleistet, wenn Änderungen an den Referenzen sich immer auch an den referenzierten Objekten auswirken.
              Kannst du also immer sicherstellen, dass bei Änderungen an den URLs in der Datenbank sich gleichzeitig auch die URL des entsprechenden Files ändert?
              Und was ist mit Backups. Du musst die Datenbank mit den Metadaten sichern und  alle referenzierten Daten. Wenn du mir jetzt sagst, dass du dabei garantiert nie was falsch machst, dann hast du wirklich keine Ahnung. Und selbst wenn, dann macht das spätestens der nächste DB-Admin falsch, wenn du den Job nicht mehr hast. Die referentielle Integrität ist also nur gewährleistet, wenn Daten und Referenzen vom gleichen System verwaltet werden.

              Noch mal, wenn das hier ein bisschen konstruktiver werden soll: Hat jemand eine Idee? Frage, siehe erstes Posting.

              Ich dachte, wegen Belehrungen bist du hier? Nicht?

              Sowas kannst du dir sparen, wenn du nix anderes zu tun hast, als so 'nen Müll zu schreiben, dann lass es lieber.

              Grüesslie,

              James.

              Die Integritaet der Daten ist dadurch, dass du
              Dateien auf die Festplatte auslagerst, bestimmt
              nicht in Gefahr gebracht. Wenn doch, hast du was
              falsch gemacht.

              Hat vielleicht trotzdem jemand eine Idee? Die
              Frage war, wie Binärdaten bei einer
              SQL-Abfrage(INSERT)in php so maskiert werden
              können, dass der Parser nicht abbricht.

              Das sagt dir das Handbuch deines DBMS. Dort sollte
              genau beschrieben stehen, welche Zeichen wie
              maskiert werden muessen.

              Belehrungen kann ich nicht brauchen.

              Ich dachte, wegen Belehrungen bist du hier? Nicht?
              Oh, gut, sag mir das das naechste mal vorher,
              dann spare ich mir Antworten.

              Gruesse,
              CK

  2. Servus,

    Poste doch mal die Fehlermeldung.

    Grus Matze

    1. Sorry, bin nicht am Arbeitsplatz, deshalb ist die Fehlermeldung auch nicht dabei. Das Problem konnte ich grundsätzlich lösen, indem ich mit der Funktion bin2hex() die Daten gewandelt habe.
      Nun habe ich aber ein umgekehrtes Problem. Beim Download aus der MS-SQL-DB gibt der Server lediglich 4096 Byte wieder her. Vielleicht weiß da jemand Bescheid warum?
      Ich hab auch überprüft, ob die Daten in der DB gelandet sind. Auf eine entsprechende T-SQL-Anfrage gibt er mir den korrekten Wert. Nur downloaden lassen sich die daten eben nicht.

      Ich poste Morgen mal den Quellcode.

      Danke und Grüesslie,

      James.

      Servus,

      Poste doch mal die Fehlermeldung.

      Grus Matze

      1. Na dann bis morgen.

        Gruss Matze