PHP DOP oggetti di grandi dimensioni (LOB)
Manuale PHP DOP di riferimento
Un'applicazione alla volta, potrebbe essere necessario un database per memorizzare i dati "grandi".
"Large" significa di solito "giro 4KB o più", anche se alcuni dei dati nel database per ottenere il "grande" prima può facilmente gestire fino a 32kb di dati. Essa può essere di testo o grandi oggetti binari in natura.
() O PDOStatement :: bindColumn ()) chiamata con la DOP in PDOStatement :: :: BindParam PARAM_LOB DOP tipo di codice consente l'uso di grandi tipi di dati.
PDO :: PARAM_LOB dice PDO per mappare i dati come un flusso, in modo da poter utilizzare PHP Streams API per operare.
Visualizzare un'immagine da un database
L'esempio che segue è legato ad una LOB $ lob variabile e quindi () invia al browser con fpassthru. Perché LOB rappresenta un flusso, in modo simile a fgets (), fread () e stream_get_contents () funzione può essere utilizzata come su di esso.
<?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); ?>
Inserire un'immagine in un database
Il seguente esempio apre un file e passare l'handle di file di DOP per fare un LOB inserito. DOP per quanto possibile in modo che il database nel modo più efficiente per ottenere il contenuto del file.
<?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(); ?>
Inserire un'immagine in un database: Oracle
Per inserire un pallonetto da un file, Oracle è leggermente diverso. Deve essere inserito dopo l'operazione, altrimenti causare l'appena inserito quando la query viene eseguita LPP con 0 lunghezza è implicitamente presentato:
<?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(); ?>