如何使用php将blob数据插入到Oracle存储过程中表的多个blob列中?

问题描述 投票:0回答:1

我有一个多列的表,其数据类型在oracle中是blob。现在如何将多个 blob 数据插入表中。以下是示例,但这里只有一种 Blob 列类型,但我有多个 Blob 列。

$lob = oci_new_descriptor($conn, OCI_D_LOB);
$stmt = oci_parse($conn, 'INSERT INTO BTAB (BLOBID, BLOBDATA) '
     .'VALUES(:MYBLOBID, EMPTY_BLOB()) RETURNING BLOBDATA INTO :BLOBDATA');
oci_bind_by_name($stmt, ':MYBLOBID', $myblobid);
oci_bind_by_name($stmt, ':BLOBDATA', $lob, -1, OCI_B_BLOB);
oci_execute($stmt, OCI_DEFAULT);
php oracle
1个回答
0
投票

尝试这样的事情:

<?php

// create table t (b1 blob, b2 blob);

error_reporting(E_ALL);
ini_set('display_errors', 'On');

$c = oci_connect('cj', 'xxxx', 'localhost/orclpdb1');
if (!$c) {
    $m = oci_error();
    trigger_error('Could not connect to database: '. $m['message'], E_USER_ERROR);
}

$sql = <<<'END'
    insert into t (b1, b2)
      values (empty_blob(), empty_blob())
      returning b1, b2 into :myblob1, :myblob2
END;

$stmt = oci_parse($c, $sql);
$lob1 = oci_new_descriptor($c, OCI_D_LOB);
$lob2 = oci_new_descriptor($c, OCI_D_LOB);
oci_bind_by_name($stmt, ':myblob1', $lob1, -1, OCI_B_BLOB);
oci_bind_by_name($stmt, ':myblob2', $lob2, -1, OCI_B_BLOB);
oci_execute($stmt, OCI_DEFAULT);

$lob1->write('My first BLOB');
$lob2->write('My second BLOB');

oci_commit($c);

$lob1->free();
$lob2->free();

$s = oci_parse($c, "select * from t");
oci_execute($s, OCI_DEFAULT);
$arr = oci_fetch_assoc($s);
$b1 = $arr['B1']->load();
$b2 = $arr['B2']->load();

print $b1 . "\n" . $b2;

?>

输出为:

$ php t.php 
My first BLOB
My second BLOB
© www.soinside.com 2019 - 2024. All rights reserved.