PHP PDO benda-benda besar (LOB)
Aplikasi pada satu waktu, Anda mungkin perlu database untuk menyimpan data "besar".
"Besar" biasanya berarti "sekitar 4KB atau lebih", meskipun beberapa data dalam database untuk mencapai "besar" sebelum dapat dengan mudah menangani hingga 32KB data. Mungkin teks atau objek besar biner di alam.
() Atau PDOStatement :: bindColumn ()) panggilan menggunakan PDO dalam jenis kode PDOStatement :: bindParam :: PARAM_LOB PDO memungkinkan penggunaan jenis data yang besar.
PDO :: PARAM_LOB mengatakan PDO untuk memetakan data sebagai sungai, agar dapat menggunakan PHP Streaming API untuk beroperasi.
Menampilkan gambar dari database
Contoh berikut terikat dengan LOB variabel $ lob dan kemudian () mengirimkannya ke browser dengan fpassthru. Karena LOB mewakili aliran, sehingga mirip dengan fgets (), fread () dan stream_get_contents () fungsi dapat digunakan seperti di atas itu.
<?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); ?>
Menyisipkan gambar ke dalam database
Contoh berikut membuka file dan lulus menangani file untuk PDO untuk melakukan LOB dimasukkan. PDO sebanyak mungkin sehingga database dengan cara yang paling efisien untuk mendapatkan isi dari 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(); ?>
Menyisipkan gambar ke dalam database: Oracle
Untuk memasukkan lob dari file, Oracle sedikit berbeda. Harus dimasukkan setelah transaksi, jika tidak menyebabkan baru dimasukkan ketika query dijalankan LOB dengan 0 panjang secara implisit disampaikan:
<?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(); ?>