繁体   English   中英

将图像作为 BLOB 上传到 Oracle DB 时出现 PHP OCI8 警告

[英]PHP OCI8 warning while uploading an image to Oracle DB as BLOB

我正在尝试将图像上传为 oracle 数据库中的 blob。 我已经在 mysql.but 中成功地做到了这一点,但在为 Oracle 数据库做同样的事情时,我收到了两个警告

警告:oci_parse():ORA-00972:第 16 行 E:\\xampp\\htdocs\\im\\index.php 中的标识符太长

警告:oci_execute() 期望参数 1 是资源,布尔值在第 17 行的 E:\\xampp\\htdocs\\im\\index.php 中给出

需要有关此问题的帮助。 我在下面给出了我的代码。

$conn = oci_connect("DRUG_FINAL", "DRUG_FINAL", "192.xx.xx.xx:xxxx/xx");
$imgData = addslashes(file_get_contents($_FILES['userImage']['tmp_name']));
$imageProperties = getimageSize($_FILES['userImage']['tmp_name']);

$query ="INSERT INTO output_images(imageType ,imageData)
VALUES('{$imageProperties['mime']}', '{$imgData}')";
$stid = oci_parse($conn, $query);
$r = oci_execute($stid);

一种方法是创建一个描述符oci_new_descriptor()并使用RETURNING子句EMPTY_CLOB()得到一个高球,你可以流至:

  $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_NO_AUTO_COMMIT);
  $lob->savefile($_FILES['lob_upload']['tmp_name']);
  oci_commit($conn);
  $lob->free();

或者,使用$lob->writeTemporary()创建一个临时 lob 并将临时 lob 直接绑定到 INSERT 语句中:

$lob = oci_new_descriptor($c, OCI_D_LOB);
$sql = 'insert into mybtab (blobid, blobdata) values(:myblobid, :blobdata)';
$s = oci_parse($c, $sql);
oci_bind_by_name($s, ':myblobid', $myblobid);
oci_bind_by_name($s, ':blobdata', $lob, -1, OCI_B_BLOB);
$myv = file_get_contents($_FILES['lob_upload']['tmp_name']);
$lob->writeTemporary($myv, OCI_TEMP_BLOB);
oci_execute($s, OCI_NO_AUTO_COMMIT);
oci_commit($c);
$lob->close();

这在 Oracle 的免费Underground PHP 和 Oracle 手册中的“在 OCI8 中使用大型对象”一章中都有显示

根据需要将 CLOB 替换为 BLOB。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM