Les objets larges (LOB)
À un moment dans votre application, vous pourriez avoir besoin de stocker de
larges données dans votre base de données. "Large" 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 "larges". Les objets larges
peuvent être de nature textuelle ou binaire. PDO vous permet de travailler
avec ce type de larges données en utilisant le code type
PDO::PARAM_LOB
dans vos appels aux fonctions
PDOStatement::bindParam() ou
PDOStatement::bindColumn().
PDO::PARAM_LOB
demande à PDO de transformer les données
en un flux que vous pourrez manipuler en utilisant
l'API PHP des flux.
Exemple #1 Affichage d'une image depuis une base de données
<?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); ?>
Exemple #2 Insertion d'une image dans une base de données
<?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();
?>
Exemple #3 Insertion d'une image dans une base de données Oracle
<?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);
$stmt->beginTransaction();
$stmt->execute();
$stmt->commit();
?>