0

Oracle には、すべての電子メールを処理する send_mail() プロシージャがあります。

エラーなしでZendクエリからその手順を呼び出すことができます$db->query("blah blah");が、を使用する$stmt = $db->prepare("blah blah");とエラーが発生します(メールは送信されますが):

24374 ORA-24374: define not done before fetch or execute and fetch *begin send_mail(:mailto,:mailhost,:mailport,:mailfrom,:subject,:message); end;","file":"C:\\wamp\\www\\sam\\library\\Zend\\Db\\Statement\\Oracle.php

すべての変数が定義されていますか? では、何がこのエラーの原因なのかわかりませんか?

私のコード:

$db = Zend_Registry::get('db');

            $emailTo = trim($_POST['emailto']);
            $subject = trim($_POST['subject']);
            $message = trim($_POST['msg']);

        $eSettings = $db->query("Select MAIL_HOST, MAIL_PORT, MAIL_FROM from     PI_SETTINGS_TABLE")->FetchAll();

            $stmt = $db->prepare("begin send_mail(:mailto,:mailhost,:mailport,:mailfrom,:subject,:message); end;");
            $stmt->bindParam('mailto', $emailTo);
            $stmt->bindParam('mailhost', $eSettings[0]['MAIL_HOST']);
            $stmt->bindParam('mailport', $eSettings[0]['MAIL_PORT']);
            $stmt->bindParam('mailfrom', $eSettings[0]['MAIL_FROM']);
            $stmt->bindParam('subject', $subject);
            $stmt->bindParam('message', $message);
            $stmt->execute();
            $checkQuery = $stmt->FetchAll();

なぜこれをバインドステートメントとしてではなくクエリとして渡すことができるのか、誰かが光を当てることができるでしょうか?

私の SEND_MAIL 手順:

create or replace
PROCEDURE "SEND_MAIL" (
msg_to varchar2,
mail_host varchar2,
mail_port varchar2,
msg_from varchar2,
msg_subject varchar2,
msg_text varchar2 )
IS
c utl_smtp.connection;
rc integer;

BEGIN
c := utl_smtp.open_connection(mail_host, mail_port); -- SMTP on port 25
utl_smtp.helo(c, mail_host);
utl_smtp.mail(c, msg_from);
utl_smtp.rcpt(c, msg_to);

utl_smtp.data(c,'From: ' || msg_from || utl_tcp.crlf ||
'To: ' || msg_to || utl_tcp.crlf ||
'Subject: ' || msg_subject ||
utl_tcp.crlf || utl_tcp.crlf || msg_text);
utl_smtp.quit(c);

EXCEPTION
WHEN UTL_SMTP.INVALID_OPERATION THEN
dbms_output.put_line(' Invalid Operation in Mail attempt
using UTL_SMTP.');
WHEN UTL_SMTP.TRANSIENT_ERROR THEN
dbms_output.put_line(' Temporary e-mail issue - try again');
WHEN UTL_SMTP.PERMANENT_ERROR THEN
dbms_output.put_line(' Permanent Error Encountered.');
END;

注意: バインド変数を使用して SQL Developer からクエリを実行すると、次のエラーが発生し、電子メールが送信されません。

ORA-06502: PL/SQL: numeric or value error: character to number conversion error
ORA-06512: at "PI_USER_ADMIN.SEND_MAIL", line 15

しかし、それはzendで送信されますか?

よろしくお願いします

ネイサン

4

0 に答える 0