Ir para conteúdo

POWERED BY:

Arquivado

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

PaivaJr

Exclusão de registro inexistente não dá retorno de erro

Recommended Posts

Olá,

Fiz um pequeno programa em PHP/Firebird e na exclusão, quando se exclui um registro inexistente ele não dá erro.

Ele considera como se o registro fosse excluido normalmente.

Estou usando o EasyPHP 14.1 com Firebird 2.1

obs.: quando v. manda excluir um registro existente, ele exclui normalmente, porem ao excluir o mesmo registropela 2ª vez ele não dá erro.

 

codigo :

?PHP
 $conexao = ibase_connect("c:/testephp/tutorial.gdb","SYSDBA","masterkey") or exit('erro');
 if ($conexao){
 $cod = $_POST["codigotxt"];
  $sql = "delete from cadastro where codigo = ".$cod;
  //echo($sql);
  $trans = ibase_trans(IBASE_COMMITTED,$conexao);
  $resultado = @ibase_query($conexao, $sql) or die(ibase_errmsg());
  if ($resultado) 
{
        echo("Exclusao efetuado");
    } 
else 
{
       echo("Erro na exclusao");
    }


  if (ibase_errmsg())
 {
echo "erro de exclusão";
}
else
 { // exclusão ok
 $result = ibase_commit($conexao) or die(ibase_errmsg());
  }
   
 echo($resultado);




} else {


  echo("Erro ao conectar-se a base");


}


ibase_close($conexao);




?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Meu amigo para que você quer excluir um registro que não existe? Não faz sentido algum, é melhor rever esta lógica!

 

Mas para saber se um registro existe é só fazer um select se retornar vazio é porque não existe!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rockrgo, não é minha intenção mas, se o cliente (usuário) ao solicitar a exclusão de um registro, errar na digitação e excluir um código não existente ?

Sou "super iniciante" em php, mais ou menos 2 semanas de conhecimento. Mas em delphi o firebird acusa erro de registro inexistente nesse caso específico. Não sei como o firebird se comporta no PHP. Daí a minha pergunta.

Afinal, se o usuário solicitar uma exclusão e na hora errar o codigo e eu não avisar, ele vai ficar consciente de que excluir o produto/fornecedor ou o que seja. Aí não seria uma falha ?


Hufersil, já utilizei esse comando e no caso se sql de exclusão para registro não existente ou existente ele sempre retorna o mesmo valor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rockrgo, não é minha intenção mas, se o cliente (usuário) ao solicitar a exclusão de um registro, errar na digitação e excluir um código não existente ?

Sou "super iniciante" em php, mais ou menos 2 semanas de conhecimento. Mas em delphi o firebird acusa erro de registro inexistente nesse caso específico. Não sei como o firebird se comporta no PHP. Daí a minha pergunta.

Afinal, se o usuário solicitar uma exclusão e na hora errar o codigo e eu não avisar, ele vai ficar consciente de que excluir o produto/fornecedor ou o que seja. Aí não seria uma falha ?

Hufersil, já utilizei esse comando e no caso se sql de exclusão para registro não existente ou existente ele sempre retorna o mesmo valor.

 

PaivaJr....entendi seu problema mas a maneira que vc faz a exclusão que acho meio perigosa....e se o cara digita o código de um registro que não era para excluir? Ele não vê o registro que está removendo? O correto é ter uma mensagem de confirmação. Ex: Deseja realmente excluir o registro XPTO ? Assim nessa simples verificação de qual registro você está excluindo, já vai saber se ele existe ou não!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Me desculpem a intromissão, mas não seria mais legal o script trazer todos os registros, aí sim após o usuário selecionar o registro executar a query de exclusão, desta forma não tem como não excluir um registro que não existe.

 

OBS: Apenas uma ideia.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Moderador, se v. tem um registro qualquer no se DB que não precisa mais dele o que v. pode fazer mais alem de excluir ? V. vai deixar "apodrecendo" no banco ? Qual seria a lógica certa ? explique ?


Rockrgo, na realidade vou ter que usar esse mesmo artifício que v. relata. Mas fica uma dúvida. Se ao executar a instrução, o PHP/Firebird dá sempre a mesma mensagem seja excluindo ou não, como vou ter a certeza de que aquele registro indesejado não está mais no meu banco de dados ?

Seguindo esse raciocínio, vou ter que fazer 2 consultas: uma para exibir o registro informando ao usuário que ele está excluindo o registro certo, e outra no final da exclusão para saber se foi mesmo excluido. V. não acha muita " codificação" para uma simples exclusão que poderia ser resolvido com uma só se houvesse um retorno correto da execução da sql de exclusão ? Em ambos os casos : excluindo ou não o registro o retorno de $resultado é sempre 1.

Por estas e outras é que tenho saudades do "velho" DOS. (rsrsr)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existe um aviso no próprio manual sobre isto:

In PHP 5.0.0 and up, this function will return the number of rows affected by the query for INSERT, UPDATE and DELETE statements. In order to retain backward compatibility, it will return TRUE for these statements if the query succeeded without affecting any rows.

 

De qualquer sorte você pode usar ibase_affected_rows para verificar quantas linhas foram afetadas na última query (ou seja, quantas linhas foram removidas na query).

Compartilhar este post


Link para o post
Compartilhar em outros sites

ESerra, aí é que está o erro. O retorno quando a instrução não afeta nenhuma linha deveira ser "0" mas sempre retorna "1", independente de excluir ou não.

Moderador, quando se tratar de grande movimentação de registros (uma grande quantidade a ser excluida semanalmente), se esses registros não forem excluídos, eles ficariam (enchendo o banco de dados <> criando mais lentidão no acesso aos demais registros, não é assim ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

ESerra, aí é que está o erro. O retorno quando a instrução não afeta nenhuma linha deveira ser "0" mas sempre retorna "1", independente de excluir ou não.

Você tem duas opções básicas:

1 - Aceitar que 1 == true, e o simples fato de não ter encontrado nada é diferente da query ter algum problema (o que faz retornar 0 == false) e utilizar o que eu citei antes, inclusive os aviso referentes as versões mais novas do PHP;

2 - Baixar os fontes do PHP e alterar para deixar ele de acordo com o que você acreditar ser certo.

 

Veja que tem várias coisas que eu não concordo em como funcionam no PHP, isso é a coisa mais natural do mundo, sempre vai ter algo que a gente acha que deveria ser diferente, de qualquer sorte o retorno obtido está de acordo com o que a linguagem se propõe a fazer.

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.