En algún momento, es posible que la aplicación necesite almacenar datos "grandes" en la base de datos.
"Grande" normalmente significa "alrededor de 4 kb o más", aunque algunas bases de datos pueden manejar fácilmente hasta 32 kb de datos antes de que lleguen a ser "grandes". Los objetos grandes pueden ser de naturaleza textual o binaria.
Utilice el código de tipo PDO::PARAM_LOB en la llamada PDOStatement::bindParam() o PDOStatement::bindColumn()) para permitir que PDO utilice tipos de datos grandes.
PDO::PARAM_LOB le dice a PDO que asigne los datos como una secuencia para que pueda manipularse utilizando la API PHP Streams.
El siguiente ejemplo vincula un LOB a la variable $lob y luego lo envía al navegador usando fpassthru(). Debido a que un LOB representa una secuencia, se pueden usar funciones como fgets(), fread() y stream_get_contents().
<?php$db = new PDO('odbc:SAMPLE', 'db2inst1', 'ibmdb2');$stmt = $db->prepare("seleccione tipo de contenido, datos de imagen de imágenes donde id=?");$stmt- >ejecutar(array($_GET['id']));$stmt->bindColumn(1, $tipo, PDO::PARAM_STR, 256);$stmt->bindColumn(2, $lob, PDO::PARAM_LOB);$stmt->fetch(PDO::FETCH_BOUND);header("Tipo de contenido: $tipo");fpassthru ($lanzamiento);?>
El siguiente ejemplo abre un archivo y pasa el identificador del archivo a PDO para insertarlo como LOB. PDO permite que la base de datos obtenga el contenido del archivo de la manera más eficiente posible.
<?php$db = new PDO('odbc:SAMPLE', 'db2inst1', 'ibmdb2');$stmt = $db->prepare("insertar en imágenes (id, tipo de contenido, datos de imagen) valores (?, ?, ?)");$id = get_new_id(); // Llame a una función para asignar una nueva ID // Supongamos que se procesa la carga de un archivo // Esto se puede hacer en PHP Más información se encuentra en la documentación $fp = fopen($_FILES['file']['tmp_name'], 'rb');$stmt->bindParam(1, $id);$stmt->bindParam(2, $ _FILES['archivo']['tipo']);$stmt->bindParam(3, $fp, PDO::PARAM_LOB);$db->beginTransaction();$stmt->execute();$db->commit();?>
Oracle es ligeramente diferente a la hora de insertar un lob desde un archivo. Las inserciones deben realizarse después de una transacción; de lo contrario, el LOB recién insertado se confirmará implícitamente con una longitud de 0 cuando se ejecute la consulta:
<?php$db = new PDO('oci:', 'scott', 'tiger');$stmt = $db->prepare("insertar en imágenes (id, tipo de contenido, datos de imagen) " ."VALUES (?, ?, EMPTY_BLOB()) REGRESANDO imagedata A ?");$id = get_new_id(); // Llama a una función para asignar una nueva ID // Suponga que maneja la carga de un archivo // Puede encontrar más información en la documentación de PHP $fp = fopen($_FILES['file']['tmp_name'], 'rb');$stmt->bindParam(1, $id ) ;$stmt->bindParam(2, $_FILES['archivo']['tipo']);$stmt->bindParam(3, $fp, PDO::PARAM_LOB);$stmt->beginTransaction();$stmt->execute();$stmt->commit();?>