ホームページ > バックエンド開発 > PHPチュートリアル > PHP -- PDO ラージ オブジェクト (LOB)

PHP -- PDO ラージ オブジェクト (LOB)

伊谢尔伦
リリース: 2016-11-22 09:30:18
オリジナル
1210 人が閲覧しました

ある時点で、アプリケーションはデータベースに「大きな」データを保存する必要がある場合があります。 「大規模」とは通常「約 4 kb 以上」を意味しますが、データベースによっては「大規模」に達する前に最大 32 kb のデータを簡単に処理できるものもあります。大きなオブジェクトは、本質的にテキストまたはバイナリである可能性があります。 PDOStatement::bindParam() または PDOStatement::bindColumn() 呼び出しで PDO::PARAM_LOB 型コードを使用すると、PDO で大きなデータ型を使用できるようになります。 PDO::PARAM_LOB は、PHP Streams API を使用してデータを操作できるように、データをストリームとしてマップするように PDO に指示します。

例 #1 データベースから画像を表示する

次の例では、LOB を $lob 変数にバインドし、fpassthru() を使用してブラウザに送信します。 LOB はストリームを表すため、fgets()、fread()、stream_get_contents() などの関数を LOB に対して使用できます。

<?php
    $db = new PDO(&#39;odbc:SAMPLE&#39;, &#39;db2inst1&#39;, &#39;ibmdb2&#39;);
    $stmt = $db->prepare("select contenttype, imagedata from images where id=?");
    $stmt->execute(array($_GET[&#39;id&#39;]));
    $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);
?>
ログイン後にコピー

例 #2 データベースに画像を挿入する

次の例では、ファイルを開き、ファイル ハンドルを PDO に渡して LOB として挿入します。 PDO を使用すると、データベースは可能な限り最も効率的な方法でファイルの内容を取得できます。

<?php
    $db = new PDO(&#39;odbc:SAMPLE&#39;, &#39;db2inst1&#39;, &#39;ibmdb2&#39;);
    $stmt = $db->prepare("insert into images (id, contenttype, imagedata) values (?, ?, ?)");
    $id = get_new_id(); // 调用某个函数来分配一个新 ID
    // 假设处理一个文件上传
    // 可以在 PHP 文档中找到更多的信息
    $fp = fopen($_FILES[&#39;file&#39;][&#39;tmp_name&#39;], &#39;rb&#39;);
    $stmt->bindParam(1, $id);
    $stmt->bindParam(2, $_FILES[&#39;file&#39;][&#39;type&#39;]);
    $stmt->bindParam(3, $fp, PDO::PARAM_LOB);
    $db->beginTransaction();
    $stmt->execute();
    $db->commit();
?>
ログイン後にコピー

例 #3 データベースへの画像の挿入: Oracle

ファイルから LOB を挿入する場合、Oracle は少し異なります。挿入はトランザクション後に実行する必要があります。そうでない場合、新しく挿入された LOB はクエリの実行時に長さ 0 で暗黙的にコミットされます。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート