mirror of
https://github.com/macintoshplus/doc-fr.git
synced 2026-03-25 09:22:07 +01:00
139 lines
4.5 KiB
XML
139 lines
4.5 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- $Revision$ -->
|
|
<!-- EN-Revision: eae19eb5fe0f5bebcbce382ea7a505cedeb5a883 Maintainer: yannick Status: ready -->
|
|
<!-- Reviewed: yes -->
|
|
|
|
<chapter xml:id="pdo.lobs" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
<title>Les gros objets (LOB)</title>
|
|
<para>
|
|
À un moment dans votre application, vous pourriez avoir besoin de stocker de
|
|
grosses données dans votre base de données. « Gros » signifie typiquement
|
|
des données d'environ 4 ko ou plus, bien que certaines bases de données peuvent
|
|
gérer plus de 32 ko avant que les données deviennent « grosses ». Les gros objets
|
|
peuvent être de nature textuelle ou binaire. PDO vous permet de travailler
|
|
avec ce type de grosses données en utilisant le code type
|
|
<constant>PDO::PARAM_LOB</constant> dans vos appels aux fonctions
|
|
<methodname>PDOStatement::bindParam</methodname> ou
|
|
<methodname>PDOStatement::bindColumn</methodname>.
|
|
<constant>PDO::PARAM_LOB</constant> demande à PDO de transformer les données
|
|
en un flux que vous pourrez manipuler en utilisant
|
|
l'<link linkend="ref.stream">API PHP des flux</link>.
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>Affichage d'une image depuis une base de données</title>
|
|
<para>
|
|
Cet exemple lie un LOB dans une variable nommée $lob et l'envoie
|
|
au navigateur en utilisant la fonction <function>fpassthru</function>.
|
|
Étant donné qu'un LOB est représenté en un flux, les fonctions comme
|
|
<function>fgets</function>, <function>fread</function> et
|
|
<function>stream_get_contents</function> peuvent être utilisées sur ce flux.
|
|
</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>Insertion d'une image dans une base de données</title>
|
|
<para>
|
|
Cet exemple ouvre un fichier et passe le pointeur de fichier à PDO
|
|
pour l'insérer en tant que LOB. PDO fera son possible pour récupérer
|
|
le contenu du fichier et l'insérer dans la base de données de la
|
|
manière la plus efficace possible.
|
|
</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(); // fonction pour allouer un nouvel ID
|
|
|
|
// assumons que nous récupérons un fichier depuis un formulaire
|
|
// vous pouvez trouver plus de détails dans la documentation de 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>Insertion d'une image dans une base de données Oracle</title>
|
|
<para>
|
|
Oracle requiert une syntaxe légèrement différente pour y insérer un LOB
|
|
depuis un fichier. Il est également essentiel d'effectuer votre insertion
|
|
au sein d'une transaction, sinon, votre nouveau LOB sera inséré
|
|
avec une longueur de zéro :
|
|
</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(); // fonction pour allouer un nouvel ID
|
|
|
|
// assumons que nous récupérons un fichier depuis un formulaire
|
|
// vous pouvez trouver plus de détails dans la documentation de 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
|
|
-->
|
|
|