我正試圖在數據庫之間將一組照片(blob)從一個表傳輸到另一個表。我快到了,除了綁定照片參數。我有以下代碼:PHP將照片從一個Oracle數據庫表傳輸到另一個
$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);
}
奇特,但卻是事實。
謝謝你。我從原文中清理了我的代碼,這只是一個錯字。我糾正了它。錯誤依然存在。 – 2010-03-16 12:36:41