上传图像为blob时的oracle警告

时间:2017-10-11 10:42:00

标签: javascript php oracle

我正在尝试在oracle数据库中将图像上传为blob。我已经在mysql中成功完成了这项工作。但在为Oracle数据库做同样的事情时,我得到了两个警告

  

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

     

警告:oci_execute()要求参数1为resource,boolean   在第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);

1 个答案:

答案 0 :(得分:2)

使用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并将temp 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();

这一切都在“使用OCI8中的大型物品”一章中所示。在Oracle的免费Underground PHP and Oracle Manual

根据需要替换BLOB替换BLOB。