PHP PDO วัตถุขนาดใหญ่ (LOBs)
คู่มือการใช้งาน PHP PDO อ้างอิง
แอพลิเคชันในช่วงเวลาที่คุณอาจต้องฐานข้อมูลเพื่อเก็บข้อมูล "ใหญ่"
"ใหญ่" มักจะหมายถึง "รอบ 4KB หรือมากกว่า" แม้ว่าบางส่วนของข้อมูลในฐานข้อมูลเพื่อให้บรรลุ "บิ๊ก" ก่อนที่จะสามารถจัดการได้ถึง 32 กิโลไบต์ของข้อมูล มันอาจจะเป็นข้อความหรือวัตถุขนาดใหญ่ไบนารีในธรรมชาติ
() หรือ PDOStatement :: bindColumn ()) โทรโดยใช้ PDO ใน PDOStatement :: bindParam :: PARAM_LOB PDO รหัสชนิดช่วยให้การใช้ชนิดข้อมูลที่มีขนาดใหญ่
PDO :: PARAM_LOB บอก PDO เพื่อทำแผนที่ข้อมูลเป็นกระแสในการสั่งซื้อเพื่อให้สามารถใช้ PHP Streams API ในการดำเนินงาน
แสดงภาพจากฐานข้อมูล
ตัวอย่างต่อไปนี้ถูกผูกไว้กับลูกเทนนิสลูกเทนนิสตัวแปร $ แล้ว () ส่งไปยังเบราว์เซอร์ที่มี fpassthru เพราะหมายถึงการลอบกระแสเพื่อให้คล้ายกับ fgets () fread () และ stream_get_contents () ฟังก์ชันสามารถนำมาใช้เช่นด้านบนของมัน
<?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); ?>
แทรกภาพลงในฐานข้อมูล
ตัวอย่างต่อไปนี้เปิดแฟ้มและผ่านการจับไฟล์ PDO จะทำลอบแทรก PDO มากที่สุดเท่าที่เป็นไปได้เพื่อให้ฐานข้อมูลในวิธีที่มีประสิทธิภาพมากที่สุดที่จะได้รับเนื้อหาของแฟ้ม
<?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(); ?>
แทรกภาพลงในฐานข้อมูลออราเคิล
สำหรับการใส่ลูกเทนนิสจากแฟ้ม, Oracle แตกต่างกันเล็กน้อย จะต้องมีการแทรกหลังการทำรายการมิฉะนั้นจะทำให้แทรกใหม่เมื่อแบบสอบถามจะถูกดำเนินการลอบ 0 ระยะเวลาในการส่งโดยปริยาย:
<?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(); ?>