mirror of
https://github.com/php/doc-pt_br.git
synced 2026-03-23 22:52:12 +01:00
136 lines
4.5 KiB
XML
136 lines
4.5 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- EN-Revision: eae19eb5fe0f5bebcbce382ea7a505cedeb5a883 Maintainer: fernandowobeto Status: ready --><!-- CREDITS: fernandowobeto -->
|
|
|
|
<chapter xml:id="pdo.lobs" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
<title>Objetos Grandes (LOBs)</title>
|
|
<para>
|
|
Em algum momento da aplicação, pode ser necessário armazenar
|
|
dados "grandes" em seu banco de dados. Grande geralmente significa "cerca de 4kb ou
|
|
mais", embora alguns bancos de dados possam lidar facilmente com até 32kb antes que os dados se tornem
|
|
"grandes". Objetos grandes podem ser de natureza textual ou binária. O PDO
|
|
permite que se trabalhe com esse tipo de dado grande usando o
|
|
código de tipo <constant>PDO::PARAM_LOB</constant>
|
|
nas chamadas a <methodname>PDOStatement::bindParam</methodname> ou
|
|
<methodname>PDOStatement::bindColumn</methodname>.
|
|
<constant>PDO::PARAM_LOB</constant> diz
|
|
ao PDO para mapear os dados como um fluxo, para que seja possível manipulá-los usando a
|
|
<link linkend="ref.stream">API de Fluxos do PHP</link>.
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>Exibindo uma imagem de um banco de dados</title>
|
|
<para>
|
|
Este exemplo vincula o LOB à variável chamada $lob e depois o envia
|
|
para o navegador usando <function>fpassthru</function>. Como o LOB
|
|
é representado como um fluxo, funções como
|
|
<function>fgets</function>, <function>fread</function> e
|
|
<function>stream_get_contents</function> podem ser usadas nele.
|
|
</para>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?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);
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>Inserindo uma imagem em um banco de dados</title>
|
|
<para>
|
|
Este exemplo abre um arquivo e passa o identificador do arquivo para o PDO para inserir
|
|
como um LOB. O PDO fará o melhor possível para obter o conteúdo do arquivo até
|
|
o banco de dados da maneira mais eficiente possível.
|
|
</para>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
$db = new PDO('odbc:SAMPLE', 'db2inst1', 'ibmdb2');
|
|
$stmt = $db->prepare("insert into images (id, contenttype, imagedata) values (?, ?, ?)");
|
|
$id = get_new_id(); // uma função para alocar um novo ID
|
|
|
|
// suponha que estamos executando como parte de um formulário de upload de 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['file']['type']);
|
|
$stmt->bindParam(3, $fp, PDO::PARAM_LOB);
|
|
|
|
$db->beginTransaction();
|
|
$stmt->execute();
|
|
$db->commit();
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>Inserindo uma imagem em um banco de dados: Oracle</title>
|
|
<para>
|
|
O Oracle requer uma sintaxe ligeiramente diferente para inserir um lob de um
|
|
arquivo. Também é essencial que você execute a inserção sob um
|
|
transação, caso contrário, seu LOB recém-inserido será comprometido com um
|
|
comprimento zero como parte do commit implícito que ocorre quando a consulta
|
|
é executada:
|
|
</para>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?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(); // uma função para alocar um novo ID
|
|
|
|
// suponha que estamos executando como parte de um formulário de upload de 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['file']['type']);
|
|
$stmt->bindParam(3, $fp, PDO::PARAM_LOB);
|
|
|
|
$db->beginTransaction();
|
|
$stmt->execute();
|
|
$db->commit();
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
</chapter>
|
|
|
|
<!-- Keep this comment at the end of the file
|
|
Local variables:
|
|
mode: sgml
|
|
sgml-omittag:t
|
|
sgml-shorttag:t
|
|
sgml-minimize-attributes:nil
|
|
sgml-always-quote-attributes:t
|
|
sgml-indent-step:1
|
|
sgml-indent-data:t
|
|
indent-tabs-mode:nil
|
|
sgml-parent-document:nil
|
|
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
|
sgml-exposed-tags:nil
|
|
sgml-local-catalogs:nil
|
|
sgml-local-ecat-files:nil
|
|
End:
|
|
vim600: syn=xml fen fdm=syntax fdl=2 si
|
|
vim: et tw=78 syn=sgml
|
|
vi: ts=1 sw=1
|
|
-->
|
|
|