OCIError() - помогите решить проблему.

Ashotovich

Новичок
OCIError() - помогите решить проблему.

День добрый.

Пытаюсь сделать обработку ошибок при обращении к Oracle в скриптах, да вот незадача... В случае значение OCIError остается пустым, или я чего-то не понимаю.

Пишу: (В данном конкретном случае ошибкой бывает попытка удаления записи, имеющую дочерние связи, то есть ORA-02292)

PHP:
$query = "DELETE FROM *** WHERE ***=***";
$conn = OCILogon('***', '***');
$stmt = OCIParse($conn, $query);
        OCIExecute($stmt);

if (OCIError($stmt))
{ 
$err=OCIError($stmt);
echo "<html>".$err['code']."</html>";
}
В итоге:
Выдается обычная мессага насчет того, что ошибка и все такое, но вот значение $err['code'] - отсутствует, то бишь, выходит, не задано.

Пожалуйста, объясните - что я делаю не так.
Заранее спасибо.
 

Zh0rzh

Новичок
пробуй так
Код:
$query = "DELETE FROM *** WHERE ***=***"; 
$conn = OCILogon('***', '***'); 
$stmt = OCIParse($conn, $query); 
$mess = OCIExecute($stmt); 

if (!$mess)  {
   $err=OCIError($stmt); 
   echo "<html>".$err['code']."</html>";
}
Твоя ошибка была в том, что ты вызывал OCIError() дважды
 

Ashotovich

Новичок
Спасибо. Видимо, так и было. Вот что в итоге у меня заработало:

PHP:
$stmt = OCIParse($conn, $query);
        @OCIExecute($stmt); //Знак "@" ставится, чтобы Апач не выдавал ошибку. Сами ее обработаем ниже.

$err=OCIError($stmt);
if (isset($err['code']))
{
/* Обработка кода ошибки, последующие действия */ 
}
 

tony2001

TeaM PHPClub
для пущей красоты можно так:
PHP:
//...
if ($err=OCIError($stmt))
{ 
  echo "<html>".$err['code']."</html>";
}
 

Ashotovich

Новичок
Ну да, только вот я пытаюсь сделать более детальную обработку, чтобы не пугать пользователей. То есть выдать не код ошибки, а его "дескрипшн", то есть нечто вроде "Ошибка! Вы пытаетесь удалить запись, имеющую дочерние связи!" и пр. А для себя - то, конечно, удобнее просто код выдавать.
 

tony2001

TeaM PHPClub
в данный момент я примерно тем же занимаюсь =)
все достаточно нехитро - завел в конфиге константы для разных видов ошибок и подаю в шаблон их в разных ситуациях.
в шаблоне разруливается какой мессадж для какой ошибки писать.
 

Ashotovich

Новичок
Ну это ты уже совсем круто задумал. ;) У меня все просто (да и обшибки все больше глупые - типа тех же попыток удалить записи с дочерними связями). Обработку большинства ошибок делаю непосредственно в форме - JavaScript-ами. Типа "не заполнено поле", "неправильный тип данных".
 
Сверху