[英]PHP Transferring Photos From One Oracle Database Table to Another
我正在尝试将一组照片(斑点)从一个表转移到另一个数据库。 除了绑定photo参数,我快到了。 我有以下代码:
$conn_db1 = oci_pconnect('username', 'password', 'db1');
$conn_db2 = oci_pconnect('username', 'password', 'db2');
$parse_db1_select = oci_parse($conn_db1,
"SELECT
REF PID,
BINARY_OBJECT PHOTOGRAPH
FROM
BLOBS");
$parse_db2_insert = oci_parse($conn_db2,
"INSERT INTO
PHOTOGRAPHS
(PID,
PHOTOGRAPH)
VALUES
(:pid,
:photo)");
oci_execute($parse_db1_select);
while ($row = oci_fetch_assoc($parse_db1_select)) {
$pid = $row['PID'];
$photo = $row['PHOTOGRAPH'];
oci_bind_by_name($parse_db2_insert, ':pid', $pid, -1, OCI_B_INT);
// This line causes an error
oci_bind_by_name($parse_db2_insert, ':photo', $photo, -1, OCI_B_BLOB);
oci_execute($parse_db2_insert);
}
oci_close($db1);
oci_close($db2);
但是我在上面注释的错误行中收到以下错误:
Warning: oci_execute() [function.oci-execute]: ORA-03113: end-of-file on communication channel Process ID: 0 Session ID: 790 Serial number: 118
有人知道这样做的正确方法吗?
问题解决了
通过一些互联网搜索,我找到了一个可行的解决方案。 我将插入SQL更改为:
$parse_db2_insert = oci_parse($conn_db2,
"INSERT INTO
PHOTOGRAPHS
(P_ID,
PHOTOGRAPH)
VALUES
(:pid,
EMPTY_BLOB())
RETURNING PHOTOGRAPH INTO :photo");
然后更改了While循环:
while ($row = oci_fetch_assoc($parse_db1_select)) {
$pid = $row['PID'];
$photo = $row['PHOTOGRAPH'];
oci_bind_by_name($parse_db2_insert, ':pid', $pid);
$new_lob = oci_new_descriptor($conn_unite, OCI_D_LOB);
oci_bind_by_name($parse_db2_insert, ':photo', $new_lob, -1, OCI_B_BLOB);
oci_execute($parse_db2_insert, OCI_DEFAULT);
$new_lob->save($photo->load());
oci_commit($conn_unite);
}
奇特,但事实如此。
oci_bind_by_name($parse_db_insert, ':photo', $photo, -1, OCI_B_BLOB);
您尚未定义$ parse_db_insert变量。
我想这只是这个错误。
第2部分
建立连接后,会返回此ORACLE错误,但随后会发生超时(如超时)(此处为完整说明: http : //www.dba-oracle.com/m_ora_03113_end_of_file_on_communications_channel.htm ),将返回此ORACLE错误。
首先,您确定两个变量$ pid和$ photo包含实际值吗? 其次,在PHP手册中oci_bind_by_name下指出:
绑定调用告诉Oracle从哪个内存地址读取数据。 对于IN绑定,在调用oci_execute()时,该地址需要包含有效数据。 这意味着变量绑定必须保留在范围内,直到执行。 否则,可能会发生意外结果或错误,例如“ ORA-01460:未实现或不合理的转换请求”。 对于OUT绑定,一种症状是未在PHP变量中设置任何值。
全文在这里: http : //php.net/manual/en/function.oci-bind-by-name.php
也许您只是绑定错误,或者您的变量为空。
否-错误来自以下行。
您无需检查以前的oci调用即可查看它们是否返回了有效结果-如果连接失败或超时,则会在此处收到此错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.