grandes objetos PHP PDO (LOB)
Aplicación a la vez, es posible que tenga una base de datos para almacenar datos "grandes".
"Grande" por lo general significa "alrededor de 4 kb o más", aunque algunos de los datos en la base de datos para lograr la "gran" antes puede manejar fácilmente hasta 32 KB de datos. Puede ser texto o grandes objetos binarios en la naturaleza.
() O PDOStatement :: bindColumn ()) llamada mediante la DOP en el código de tipo PDOStatement :: :: bindParam PARAM_LOB DOP permite el uso de grandes tipos de datos.
PDO :: PARAM_LOB dice PDO para mapear los datos como un flujo, con el fin de ser capaz de utilizar PHP API de Secuencia de operar.
Mostrar una imagen a partir de una base de datos
En el siguiente ejemplo se enlaza a un LOB variable $ vaselina y luego () envía al navegador con fpassthru. Debido LOB representa una corriente, de modo similar a fgets (), fread () y stream_get_contents () función se puede utilizar como en la parte superior de la misma.
<?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); ?>
Insertar una imagen en una base de datos
El siguiente ejemplo abre un archivo y pasar el identificador de archivo de DOP hacer un LOB insertado. PDO tanto como sea posible de modo que la base de datos de la manera más eficiente para obtener el contenido del archivo.
<?php $db = new PDO('odbc:SAMPLE', 'db2inst1', 'ibmdb2'); $stmt = $db->prepare("insert into images (id, contenttype, imagedata) values (?, ?, ?)"); $id = get_new_id(); // 调用某个函数来分配一个新 ID // 假设处理一个文件上传 // 可以在 PHP 文档中找到更多的信息 $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(); ?>
Insertar una imagen en una base de datos: Oracle
Para la inserción de un globo de un archivo, Oracle es ligeramente diferente. Debe ser insertado después de la transacción, de lo contrario hacer que el recién insertado cuando la consulta se ejecuta con LOB 0 longitud se presenta de forma implícita:
<?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(); // 调用某个函数来分配一个新 ID // 假设处理一个文件上传 // 可以在 PHP 文档中找到更多的信息 $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(); ?>