Em algum momento, o aplicativo pode precisar armazenar dados “grandes” no banco de dados.
"Grande" geralmente significa "cerca de 4kb ou mais", embora alguns bancos de dados possam facilmente lidar com até 32kb de dados antes que os dados atinjam "grandes". Objetos grandes podem ser de natureza textual ou binária.
Use o código do tipo PDO::PARAM_LOB na chamada PDOStatement::bindParam() ou PDOStatement::bindColumn()) para permitir que o PDO use grandes tipos de dados.
PDO::PARAM_LOB diz ao PDO para mapear os dados como um fluxo para que possam ser manipulados usando a API PHP Streams.
O exemplo a seguir vincula um LOB à variável $lob e o envia ao navegador usando fpassthru(). Como um LOB representa um stream, funções como fgets(), fread() e stream_get_contents() podem ser usadas nele.
<?php$db = new PDO('odbc:SAMPLE', 'db2inst1', 'ibmdb2');$stmt = $db->prepare("selecione contenttype, imagedata from images where id=?");$stmt- >executar(array($_GET['id']));$stmt->bindColumn(1, $type, PDO::PARAM_STR, 256);$stmt->bindColumn(2, $lob, PDO::PARAM_LOB);$stmt->fetch(PDO::FETCH_BOUND);header("Tipo de conteúdo: $type");fpassthru ($lob);?>
O exemplo a seguir abre um arquivo e passa o identificador do arquivo para o PDO para inserção como um LOB. O PDO permite que o banco de dados obtenha o conteúdo dos arquivos da maneira mais eficiente possível.
<?php$db = new PDO('odbc:SAMPLE', 'db2inst1', 'ibmdb2');$stmt = $db->prepare("inserir em imagens (id, contenttype, imagedata) valores (?, ?, ?)");$id = get_new_id(); // Chame uma função para atribuir um novo ID // Suponha que um upload de arquivo seja processado // Isso pode ser feito em PHP Mais informações encontradas na documentação $fp = fopen($_FILES['file']['tmp_name'], 'rb');$stmt->bindParam(1, $id);$stmt->bindParam(2, $ _FILES['arquivo']['tipo']);$stmt->bindParam(3, $fp, PDO::PARAM_LOB);$db->beginTransaction();$stmt->execute();$db->commit();?>
O Oracle é um pouco diferente para inserir um lob de um arquivo. As inserções devem ser feitas após uma transação, caso contrário, o LOB recém-inserido será implicitamente confirmado com comprimento 0 quando a consulta for executada:
<?php$db = new PDO('oci:', 'scott', 'tiger');$stmt = $db->prepare("inserir em imagens (id, contenttype, imagedata) " ."VALUES (?, ?, EMPTY_BLOB()) RETURNING imagedata INTO ?");$id = get_new_id(); // Chama uma função para atribuir um novo ID // Suponha que você esteja lidando com o upload de um arquivo // Mais informações podem ser encontradas na documentação do PHP $fp = fopen($_FILES['file']['tmp_name'], 'rb');$stmt->bindParam(1, $id ) ;$stmt->bindParam(2, $_FILES['arquivo']['tipo']);$stmt->bindParam(3, $fp, PDO::PARAM_LOB);$stmt->beginTransaction();$stmt->execute();$stmt->commit();?>