Irgendwann muss die Anwendung möglicherweise „große“ Daten in der Datenbank speichern.
„Groß“ bedeutet normalerweise „etwa 4 KB oder mehr“, obwohl einige Datenbanken problemlos bis zu 32 KB Daten verarbeiten können, bevor die Daten „groß“ werden. Große Objekte können Text- oder Binärobjekte sein.
Verwenden Sie den PDO::PARAM_LOB-Typcode im PDOStatement::bindParam()- oder PDOStatement::bindColumn())-Aufruf, um PDO die Verwendung großer Datentypen zu ermöglichen.
PDO::PARAM_LOB weist PDO an, die Daten als Stream abzubilden, damit sie mithilfe der PHP-Streams-API manipuliert werden können.
Das folgende Beispiel bindet ein LOB an die Variable $lob und sendet es dann mit fpassthru() an den Browser. Da ein LOB einen Stream darstellt, können Funktionen wie fgets(), fread() und stream_get_contents() darauf verwendet werden.
<?php$db = new PDO('odbc:SAMPLE', 'db2inst1', 'ibmdb2');$stmt = $db->prepare("select contenttype, imagedata from images where id=?");$stmt- >execute(array($_GET['id']));$stmt->bindColumn(1, $type, PDO::PARAM_STR, 256);$stmt->bindColumn(2, $lob, PDO::PARAM_LOB);$stmt->fetch(PDO::FETCH_BOUND);header("Content-Type: $type");fpassthru ($lob);?>
Das folgende Beispiel öffnet eine Datei und übergibt das Dateihandle an PDO zum Einfügen als LOB. PDO ermöglicht es der Datenbank, Dateiinhalte auf möglichst effiziente Weise abzurufen.
<?php$db = new PDO('odbc:SAMPLE', 'db2inst1', 'ibmdb2');$stmt = $db->prepare("in Bilder einfügen (id, contenttype, imagedata) Werte (?, ?, ?)");$id = get_new_id(); // Rufen Sie eine Funktion auf, um eine neue ID zuzuweisen // Gehen Sie davon aus, dass ein Datei-Upload verarbeitet wird // Dies kann in PHP erfolgen Weitere Informationen finden Sie in der Dokumentation $fp = fopen($_FILES['file']['tmp_name'], 'rb');$stmt->bindParam(1, $id);$stmt->bindParam(2, $ _FILES['file']['type']);$stmt->bindParam(3, $fp, PDO::PARAM_LOB);$db->beginTransaction();$stmt->execute();$db->commit();?>
Oracle geht beim Einfügen eines Lobs aus einer Datei etwas anders vor. Einfügungen müssen nach einer Transaktion erfolgen, andernfalls wird das neu eingefügte LOB implizit mit der Länge 0 festgeschrieben, wenn die Abfrage ausgeführt wird:
<?php$db = new PDO('oci:', 'scott', 'tiger');$stmt = $db->prepare("insert into images (id, contenttype, imagedata) " ."VALUES (?, ?, EMPTY_BLOB()) RETURNING imagedata INTO ?");$id = get_new_id(); // Rufen Sie eine Funktion auf, um eine neue ID zuzuweisen // Angenommen, die Handhabung eines Datei-Uploads // Weitere Informationen finden Sie in der PHP-Dokumentation $fp = fopen($_FILES['file']['tmp_name'], 'rb');$stmt->bindParam(1, $id ) ;$stmt->bindParam(2, $_FILES['file']['type']);$stmt->bindParam(3, $fp, PDO::PARAM_LOB);$stmt->beginTransaction();$stmt->execute();$stmt->commit();?>