ここでは、PHP を使用して BLOB フィールドを操作する例を紹介します。
この例は、ユーザーがアップロードした画像ファイルを BLOB に保存する例です。
次の構造を持つテーブルがあるとします:
CREATE TABLE PICTURES (
ID NUMBER,
DESCRIPTION VARCHAR2(100),
PICTURE BLOB
); 次に、データを処理するために使用される PHP プログラム コードがあります。
//Oracle データベース接続を確立します
$conn = OCILogon($user, $password, $SID);
//SQL ステートメントを Oracle に送信します
//ここで注意すべき 2 つの点: まず、EMPTY_BLOB ( )関数。これは、LOB ロケータを返す Oracle の内部関数です。 LOB を挿入する場合、このメソッドを使用できるのは、最初に空の LOB ロケーターを生成し、次にこのロケーターを操作する場合のみです。 EMPTY_BLOB() 関数は BLOB タイプ用であり、CLOB に対応する関数は EMPTY_CLOB() です。 2 番目は RETURNING 以降の部分で、PHP の OCI 関数が処理できるように画像を返します。
$stmt = OCIParse($conn,"INSERT INTO PICTURES (id, description, picture)
VALUES (pic_seq.NEXTVAL, '$description', EMPTY_BLOB()) RETURNING picture INTO :PICTURE"); LOB オブジェクトの記述子。関数の 2 番目のパラメータ OCI_D_LOB に注目してください。これは、LOB オブジェクトを生成することを意味します。他に考えられるのは OCI_D_FILE と OCI_D_ROWID で、それぞれ BFILE オブジェクトと ROWID オブジェクトに対応します。
$lob = OCINewDescriptor($conn, OCI_D_LOB);
//生成された LOB オブジェクトを、前の SQL 文によって返されたロケータにバインドします。
OCIBindByName($stmt, ':PICTURE', &$lob, -1, OCI_B_BLOB);
OCIExecute($stmt);
//データを LOB オブジェクトに保存します。ここでのソース データはファイルであるため、LOB オブジェクトの savefile() メソッドを直接使用します。 LOB オブジェクトのその他のメソッドには、save() および load() があり、それぞれデータの保存と取得に使用されます。ただし、BFILE タイプには save()
if($lob->savefile($lob_upload)){
OCICommit($conn);
echo "アップロード成功
"; という 1 つのメソッドしかありません。 "アップロードに失敗しました
}
OCIFreeDesc($stmt);
OCILogoff($conn);
http://www.bkjia.com/PHPjc/631759.html
www.bkjia.com
true