[英]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.