Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Iso

Uso try catch

Recommended Posts

Pessoas!!Minha excessão não está entrando no catch... está dando erro de primary key mas simplesmente um warning é emitido na tela (Warning: ibase_query() [function.ibase-query]: violation of PRIMARY or UNIQUE KEY constraint "PK_RESERVAS" on table "RESERVAS" in C:\projetos\PHP\eliteweb\reserva\validareserva.php on line 34)Segue o código, na linha ($result = ibase_query($transacao, $sqlins)) é q dá o erro, mas não entra no catch. try { if ($execsql->sql_insert <> ""){ $transacao = ibase_trans(); $sqlins = "insert into RESERVAS ".$execsql->sql_insert. ")". " values ". $execsql->sql_insert_values .")" ; $result = ibase_query($transacao, $sqlins); } } catch (Exception $e) { echo 'exceção: ', $e->getMessage(), "\n";}Precisa configurar alguma coisa diferente no php.ini para um erro de primary key ser considerado um erro e não um warning?Grata,Iso

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso ocorre (ou não ocorre) porque as funções puras do PHP, tipo mysql_*, ibase_*, pg_* NÃO lançam exceções!

O catch só "pega" os erros lançados pela clausula "throw", então para você conseguir fazer funcionar da maneira desejada este script você teria que fazer a verificação manualmente e lançar a exceção, ex:

 

try {if ($execsql->sql_insert <> ""){$transacao = ibase_trans();$sqlins = "insert into RESERVAS ".$execsql->sql_insert. ")"." values ". $execsql->sql_insert_values .")";$result = ibase_query($transacao, $sqlins); if(ibase_num_fields($result) < 1) {	throw new Exception("Ocorreu o erro XPTO!");}} } catch (Exception $e) {echo 'exceção: ', $e->getMessage(), "\n";}

Assim o catch funciona do jeito que você deseja...

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!!Obrigada por responder.Fiz como você me passou, mas usando esse ibase_num_fields, dá erro e depois entra na excessão. Warning: ibase_num_fields(): supplied argument is not a valid Firebird/InterBase result resource in C:\projetos\PHP\eliteweb\reserva\validareserva.php on line 60exceção: Ocorreu o erro XPTO! Dai tentei fazer assim:try {if ($execsql->sql_insert <> ""){$transacao = ibase_trans();$sqlins = "insert into RESERVAS ".$execsql->sql_insert. ")"." values ". $execsql->sql_insert_values .")";$result = @ibase_query($transacao, $sqlins); if (!$result) { throw new Exception("Ocorreu o erro XPTO!");}} } catch (Exception $e) {echo 'exceção: ', $e->getMessage(), "\n";}Assim funcionou, pode ser assim? ou deveria funcionar o ibase_num_fields?, é q pelo q entendi esse ibase_num_fields retorna a quantidade de fields de query, acho q só é usado para SELECT, ou será q estou equivocada?Muito obrigada pela atenção,Iso

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já fiz mas deu outro erro, pus o codigo da seguinte forma:

 

require_once "PagSeguroLibrary/PagSeguroLibrary.php";

 

if (isset($_POST['comprar'])){


$paymentRequest = new PagSeguroPaymentRequest();  
$paymentRequest->addItem('0001', 'Notebook', 1, 25.00); 

$paymentRequest->setSender(  
    'Nome do Cliente',   
    'emailcliente@gmail.com',   
    '11',   
    '9616697951'  
);  

$paymentRequest->setCurrency("BRL"); 
$paymentRequest->setShippingType(1);  
$paymentRequest->setReference("I9635");   //Id do produto

// Informando as credenciais  
$credentials = new PagSeguroAccountCredentials(  
    'meuemail@hotmail.com',   
    'meutoken'  
);  
 try {  
      
    /*   
        Fazendo uma requisição via API com credenciais incorretas 
    */  
    $url = $paymentRequest->register($credentials);  
      
} catch (PagSeguroServiceException $e) {  
      
    echo $e->getHttpStatus(); // imprime o código HTTP  
      
    foreach ($e->getErrors() as $key => $error) {  
        echo $error->getCode(); // imprime o código do erro  
        echo $error->getMessage(); // imprime a mensagem do erro  
    }} 


}

O erro é:

Catchable fatal error: Object of class PagSeguroHttpStatus could not be converted to string in /home/mauro/public_html/om/contemia.php on line 37

 

37 : echo $e->getHttpStatus(); // imprime o código HTTP

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.