Ankündigung

Einklappen
Keine Ankündigung bisher.

MS SQL (pdo) und Blob

Einklappen

Neue Werbung 2019

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

  • MS SQL (pdo) und Blob

    Hi,

    ich muss größere Datein in eine MS Sql datenbank ablegen,
    leider stoße ich von einem zum nächsten Problem.

    PHP->PDO->ODBC->FreeTDS->MS SQL

    PHP hatte anfangs das Problem, das wenn ich
    mit unpack arbeite out of memory bekomm hatte ...
    (hab das mit memory_limit -1 mehr schlecht als recht gelöst, weswegen ich das jetzt über die pdo bind_param mache.. )

    Danach hab ich immer ein out of memory bekommen
    (wenn ich ein feld vom typ image im select hatte)
    (https://bugs.php.net/bug.php?id=42765)

    Desweitern hab ich folgene Parameter in der php.ini verändert:
    Code:
    ; Valid range 0 - 2147483647.  Default = 4096.
    mssql.textlimit = 2147483647
    
    ; Valid range 0 - 2147483647.  Default = 4096.
    mssql.textsize = 2147483647

    Zu guter letzt bekomm ich jetzt folgenden Fehler (wenn ich den typ auf varbin(max) stell):
    [FreeTDS][SQL Server]String or binary data would be truncated.

    Mein aktueller Code zum einspielen:
    PHP-Code:
    $db = new PDO('odbc:Archiv''xxx''xxx');

    $stmt $db->prepare("insert into test_binary (test) values (?)");

    if (!
    $stmt) {
      
    print_r($stmt->errno);
    }

    $fp fopen("alternativlos-17.mp3"'rb');

    $stmt->bindParam(1$fpPDO::PARAM_LOB);

    $db->beginTransaction();
    $stmt->execute();
    $db->commit();
    print_r($stmt->errorInfo()); 
    Bin schon etwas sehr frustriert und weiß nicht mehr weiter...

  • #2
    commit + transaction begin aufs statement legen nicht auf die datenbank

    Kommentar


    • #3
      Zitat von tr0y Beitrag anzeigen
      commit + transaction begin aufs statement legen nicht auf die datenbank
      das ändert leider auch nix an dem problem ..

      Kommentar


      • #4
        PHP-Code:

        $fp 
        fopen("alternativlos-17.mp3"'rb');

        $stmt->bindParam(1$fpPDO::PARAM_LOB); 
        da fehlt irgendwas .....

        $fp ist jetzt auch nur ein sogenanntes Datei-Handle (File-Ressource oder wie du es nennen willst) du willst aber die echten Dateidaten da einfügen, dazu müsstest du die Datei erstmal einlesen .. und da knallt es dann wieder am Speicherverbrauch ... und was lernen wir daraus ? genau .. lass den Unsinn Binärdaten in die Datenbank zu schreiben, leg die Datei im Dateisystem an geeigneter Stelle ab und speicher in der Datenbank den Pfad+Dateinamen...

        Kommentar


        • #5
          Zitat von eagle275 Beitrag anzeigen
          und was lernen wir daraus ? genau .. lass den Unsinn Binärdaten in die Datenbank zu schreiben, leg die Datei im Dateisystem an geeigneter Stelle ab und speicher in der Datenbank den Pfad+Dateinamen...
          Würde das ja gerne lassen, um genau zu sein habe ich allen davon abgeraten !!!
          Leider ändert das nix, sie wollen das so haben und aus...

          Und bzgl der file resource, in der php doku übergeben sie diese auch direkt an pdo->

          http://php.net/manual/en/pdo.lobs.php

          siehe Example #2 Inserting an image into a database

          Kommentar


          • #6
            ah .. ok .. Automatismus ...

            hast du mal den letzten Kommentar angeschaut, ob du eventuell soetwas machst ? eventuell hilft dir auch der 4te Parameter weiter, in dem du die Dateigröße angibst

            Kommentar


            • #7
              hab mal die dateigröße angegebe:
              Code:
              Array
              (
                  [0] => 00000
                  [1] => 0
                  [2] =>  (SQLExecute[0] at /build/buildd/php5-5.3.5/ext/pdo_odbc/odbc_stmt.c:254)
                  [3] => 00000
              )
              ohne filesize:
              Code:
              Array
              (
                  [0] => 22001
                  [1] => 8152
                  [2] => [FreeTDS][SQL Server]String or binary data would be truncated. (SQLExecute[8152] at /build/buildd/php5-5.3.5/ext/pdo_odbc/odbc_stmt.c:254)
                  [3] => 22001
              )
              das character encoding hat damit wohl auch nix zu tun, habe es testweise mal mit und ohne probiert, ohne erkennbaren unterschied..

              Kommentar

              Lädt...
              X