2017-01-22 4 views
0

У меня есть (пример) Oracle хранимой процедуры:PHP PDO вывода пользовательских исключений

CREATE OR REPLACE FUNCTION EXCEPTION_TEST 
    RETURN NUMBER 
AS 
BEGIN 
    raise_application_error(-20500, 'This is the exception text I want to print.'); 
END; 

и я называю это в PHP с PDO со следующим кодом:

$statement = $conn->prepare('SELECT exception_test() FROM dual'); 
$statement->execute(); 

вызов функции работает отлично, но теперь я хочу напечатать только текст исключения.

Я где-то читал, что вы не должны использовать try и catch с PDO. Как я могу это сделать?

ответ

1

Вы прочитали, что не должны улавливать ошибку до отчет.

Однако, если вы хотите ручкой это как-то, все в порядке, чтобы поймать его.

Основываясь на примере из моей статьи о handling exception in PDO,

try { 
    $statement = $conn->prepare('SELECT exception_test() FROM dual'); 
    $statement->execute(); 
} catch (PDOException $e) { 
    if ($e->getCode() == 20500) { 
     echo $e->getmessage(); 
    } else { 
     throw $e; 
    } 
} 

Здесь вы либо получаете вашу конкретная ошибку или повторно метание исключения назад, чтобы сделать его обработали обычный способ

+0

Хорошо, спасибо. Теперь я сделаю это. Однако невозможно получить только текст исключения или не так ли? – Stjubit

+0

Я не понимаю ваш вопрос. вы хотите, чтобы этот текст был как выход функции? –

+0

Да. Я хочу вывести текст исключения («Это текст исключения, который я хочу напечатать») для пользователя, потому что я выполняю обнаружение ошибок в хранимых процедурах и функциях SQL. Метод getMessage печатает множество вещей, но я хочу получить текст исключения. Разделение сообщения, чтобы получить только текст исключения только для этого? – Stjubit

0

Вы проверяете ответ выполнить и получить ошибку, например, так:

if ($statement->execute() != true) { 
    echo $statement->errorCode(); 
    echo $statement->errorInfo(); 
} 

Вы можете найти больше вариантов в то PDO manual.

+0

Ладно, спасибо , Это работает. Теперь я получаю следующий вывод: 'Fatal error: Uncaught exception 'PDOException' с сообщением 'SQLSTATE [HY000]: Общая ошибка: 20500 OCIStmtExecute: ORA-20500: Это текст исключения, который я хочу распечатать. ORA-06512: в «EPCOS.EXCEPTION_TEST», строка 5 (ext \ pdo_oci \ oci_statement.c: 148) 'в C: \ xampp \ htdocs \ epcos \ test.php: 9 Трассировка стека: # 0 C: \ xampp \ htdocs \ epcos \ test.php (9): PDOStatement-> execute() # 1 {main} брошен в C: \ xampp \ htdocs \ epcos \ test.php в строке 9' Как распечатать текст исключения только (Это исключение ...)? – Stjubit

+0

Ну, если вы хотите обрабатывать определенные исключения, то вы используете 'try/catch' (http://stackoverflow.com/questions/11102644/pdo-exception-questions-how-to-catch-them). Если вы хотите знать, если результат был успешным, вы используете простой 'if'. – Peon

+0

Итак, вы имеете в виду, что невозможно получить текст исключения, и я должен проверить, имеет ли код исключения (-20500) и печатает текст с помощью PHP? – Stjubit

Смежные вопросы