我正在尝试在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);
答案 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。