어떤 시점에서는 애플리케이션이 데이터베이스에 "큰" 데이터를 저장해야 할 수도 있습니다.
"대형"은 일반적으로 "약 4kb 이상"을 의미하지만 일부 데이터베이스에서는 데이터가 "대형"에 도달하기 전에 최대 32kb의 데이터를 쉽게 처리할 수 있습니다. 큰 개체는 본질적으로 텍스트이거나 바이너리일 수 있습니다.
PDOStatement::bindParam() 또는 PDOStatement::bindColumn()) 호출에서 PDO::PARAM_LOB 유형 코드를 사용하면 PDO가 대규모 데이터 유형을 사용할 수 있습니다.
PDO::PARAM_LOB는 PDO에게 데이터를 스트림으로 매핑하여 PHP Streams API를 사용하여 조작할 수 있도록 지시합니다.
다음 예에서는 LOB를 $lob 변수에 바인딩한 다음 fpassthru()를 사용하여 브라우저에 보냅니다. LOB는 스트림을 나타내기 때문에 fgets(), fread() 및 stream_get_contents()와 같은 함수를 사용할 수 있습니다.
<?php$db = new PDO('odbc:SAMPLE', 'db2inst1', 'ibmdb2');$stmt = $db->prepare("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("콘텐츠 유형: $type");fpassthru ($lob);?>
다음 예에서는 파일을 열고 LOB로 삽입하기 위해 파일 핸들을 PDO에 전달합니다. PDO를 사용하면 데이터베이스가 가능한 가장 효율적인 방법으로 파일 콘텐츠를 얻을 수 있습니다.
<?php$db = new PDO('odbc:SAMPLE', 'db2inst1', 'ibmdb2');$stmt = $db->prepare("이미지(id, contenttype, imagedata) 값에 삽입 (?, ?, ?)");$id = get_new_id(); // 새 ID를 할당하는 함수 호출 // 파일 업로드가 처리된다고 가정 // PHP에서 수행할 수 있음 자세한 내용은 문서 $fp = fopen($_FILES['file']['tmp_name'], 'rb');$stmt->bindParam(1, $id);$stmt->bindParam(2, $ _FILES['파일']['유형']);$stmt->bindParam(3, $fp, PDO::PARAM_LOB);$db->beginTransaction();$stmt->execute();$db->commit();?>
Oracle은 파일에서 LOB를 삽입하는 방식이 약간 다릅니다. 삽입은 트랜잭션 후에 이루어져야 합니다. 그렇지 않으면 쿼리가 실행될 때 새로 삽입된 LOB가 암시적으로 0 길이로 커밋됩니다.
<?php$db = new PDO('oci:', 'scott', 'tiger');$stmt = $db->prepare("이미지에 삽입(id, contenttype, imagedata) " ."VALUES (?, ?, EMPTY_BLOB()) 이미지 데이터 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();?>