PHP PDO 대형 오브젝트 (LOB)
한 번에 응용 프로그램, 당신은 "큰"데이터를 저장하는 데이터베이스를해야 할 수도 있습니다.
데이터베이스의 데이터 중 일부는 쉽게 데이터의 32킬로바이트를 처리 할 수 있습니다 전에 "큰"달성 할 수 있지만, "대형은"보통 "4킬로바이트 이상 주위에"를 의미한다. 그것은 텍스트 또는 자연 이진 대형 개체 수 있습니다.
PDOStatement :: bindParam :: PARAM_LOB PDO 타입 코드에 PDO를 사용하는 () 또는 PDOStatement :: bindColumn ()) 호출은 많은 데이터 타입을 사용할 수있다.
PDO는 :: PARAM_LOB 작동하는 PHP 스트림 API를 사용할 수있게하기 위해, 데이터 스트림으로 매핑하는 PDO 말한다.
데이터베이스에서 이미지를 표시
다음의 예는 () fpassthru와 브라우저로 전송 다음 LOB 변수 $ 로브에 결합하고있다. LOB이는 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); ?>
데이터베이스에 이미지를 삽입
다음은 파일을 열고 삽입 된 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(); ?>
데이터베이스에 이미지를 삽입 : 오라클
파일에서 로브를 삽입, 오라클은 약간 다릅니다. 그렇지 않으면 쿼리가 0 길이가 암시 적으로 제출하여 LOB를 실행할 때 새로 삽입 된 원인, 거래 후 삽입해야합니다 :
<?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(); ?>