PHP DOP objetos grandes (LOBs)
Aplicação de cada vez, você pode precisar de um banco de dados para armazenar dados "grandes".
"Large" geralmente significa "em torno de 4 KB ou mais", embora alguns dos dados no banco de dados para obter o "grande" antes pode facilmente lidar com até 32kb de dados. Pode ser um texto ou grandes objetos binários na natureza.
call () Ou PDOStatement :: bindColumn ()) usando o DOP no código de tipo PDOStatement :: :: bindParam PARAM_LOB DOP permite o uso de grandes tipos de dados.
DOP :: PARAM_LOB diz DOP para mapear os dados como uma corrente, a fim de ser capaz de usar o PHP API de fluxos para operar.
Exibir uma imagem de um banco de dados
O exemplo a seguir é vinculado a uma variável $ lob LOB e, em seguida, () envia para o navegador com fpassthru. Porque LOB representa um fluxo, de modo semelhante ao fgets (), fread () e stream_get_contents () função pode ser usada tal como em cima dela.
<?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); ?>
Inserir uma imagem em um banco de dados
O exemplo a seguir abre um arquivo e passar o identificador de arquivo para DOP para fazer um LOB inserido. DOP, tanto quanto possível, de modo que a base de dados da maneira mais eficiente para obter o conteúdo do ficheiro.
<?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(); ?>
Inserir uma imagem em um banco de dados Oracle
Para a inserção de um lob de um arquivo, a Oracle é um pouco diferente. Deve ser inserido após a transação, caso contrário, fazer com que o recém-inserido quando a consulta é executada LOB com comprimento 0 é submetido implicitamente:
<?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(); ?>