PHPのPDOラージ・オブジェクト(LOB)
当時のアプリケーションは、あなたが「大きな」データを格納するデータベースが必要な場合があります。
簡単にデータの32キロバイトまで扱うことができる前に、データベース内のデータの一部は「ビッグ」を達成するものの、「大」は、通常、「周りの4キロバイト以上」を意味します。 これは、テキストや自然の中でバイナリラージオブジェクトであってもよいです。
PDOStatement :: bindParam :: PARAM_LOB PDO型コードにPDOを使用して()あるいはPDOStatement :: bindColumn())の呼び出しは、大規模なデータ・タイプを使用することができます。
PDO :: PARAM_LOBが動作するPHPストリームAPIを使用することができるようにするために、ストリームとしてデータをマッピングするためにPDOを指示します。
データベースから画像を表示します
次の例は、LOB変数$ロブにバインドした後、()fpassthruでブラウザに送信されます。 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(); ?>
画像をデータベースに挿入します。Oracleを
ファイルからLOBを挿入するために、Oracleは若干異なります。 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(); ?>