OCI_INVALID_HANDLE при вызове процедуры Oracle

Я пытаюсь написать функцию PHP, которая вызывает процедуру оракула для отправки электронного письма с вложением, у меня написана процедура оракула, основанная на описанной здесь, с использованием BLOB в качестве вложения, http://oracle-base.com/articles/misc/email-from-oracle-plsql.php

Однако при вызове моей функции PHP я получаю Предупреждение говоря:

Warning: OCI-Lob::save(): OCI_INVALID_HANDLE in /public_html/classes/oracle.php on line 683

Функция, которую я вызываю, чтобы отправить электронное письмо:

public function sendmail_attachment($p_from, $p_to, $p_cc, $p_reply, $p_subject, $p_body, $p_attach_name, $p_attach_mime, $p_attach_blob) {
$result = '';

$stid = oci_parse($this->conn, "begin
send_email_attach (:p1,:p2,:p3,:p4,:p5,:p6,:p7,:p8,:p9);
end;");

// Creates an "empty" OCI-Lob object to bind to the locator
$myLOB = oci_new_descriptor($this->conn, OCI_D_LOB);

oci_bind_by_name($stid, ':p1', $p_from);
oci_bind_by_name($stid, ':p2', $p_to);
oci_bind_by_name($stid, ':p3', $p_cc);
oci_bind_by_name($stid, ':p4', $p_reply);

oci_bind_by_name($stid, ':p5', $p_subject);
oci_bind_by_name($stid, ':p6', $p_body);
oci_bind_by_name($stid, ':p7', $p_attach_name);
oci_bind_by_name($stid, ':p8', $p_attach_mime);
oci_bind_by_name($stid, ':p9', $myLOB, -1, OCI_B_BLOB);

$contents = file_get_contents($p_attach_blob['tmp_name']);// Now save a value to the LOB
if ( !$myLOB->save($contents) ) {

// On error, rollback the transaction
oci_rollback($this->conn);

} else {

oci_execute($stid, OCI_NO_AUTO_COMMIT);
oci_commit($this->conn);
}

// Free resources
oci_free_statement($stid);
$myLOB->free();
}

Поскольку я изменил процедуру PL / SQL и из-за конфиденциальности, я не буду публиковать то, что содержит эта процедура, однако я опубликую часть о прикреплении файла

  IF p_attach_name IS NOT NULL THEN
UTL_SMTP.write_data(l_mail_conn, '--' || l_boundary || UTL_TCP.crlf);
UTL_SMTP.write_data(l_mail_conn, 'Content-Type: ' || p_attach_mime || '; name="' || p_attach_name || '"' || UTL_TCP.crlf);
UTL_SMTP.write_data(l_mail_conn, 'Content-Transfer-Encoding: base64' || UTL_TCP.crlf);
UTL_SMTP.write_data(l_mail_conn, 'Content-Disposition: attachment; filename="' || p_attach_name || '"' || UTL_TCP.crlf || UTL_TCP.crlf);

FOR i IN 0 .. TRUNC((DBMS_LOB.getlength(p_attach_blob) - 1 )/l_step) LOOP
UTL_SMTP.write_data(l_mail_conn, UTL_RAW.cast_to_varchar2(UTL_ENCODE.base64_encode(DBMS_LOB.substr(p_attach_blob, l_step, i * l_step + 1))));
END LOOP;

UTL_SMTP.write_data(l_mail_conn, UTL_TCP.crlf || UTL_TCP.crlf);
END IF;

Кто-нибудь знает проблему к этому, пожалуйста, и если так, то знаете, как это исправить, было бы большой помощью.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]