PaivaJr 0 Denunciar post Postado Maio 20, 2014 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
rockrgo 138 Denunciar post Postado Maio 20, 2014 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
hufersil 145 Denunciar post Postado Maio 20, 2014 http://www.php.net/manual/pt_BR/function.ibase-affected-rows.php Compartilhar este post Link para o post Compartilhar em outros sites
PaivaJr 0 Denunciar post Postado Maio 21, 2014 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
Williams Duarte 431 Denunciar post Postado Maio 21, 2014 Na boa sofrer pra que? use PDO + Firebird Compartilhar este post Link para o post Compartilhar em outros sites
rockrgo 138 Denunciar post Postado Maio 21, 2014 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
Osmar L Lima 51 Denunciar post Postado Maio 21, 2014 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
Prog 183 Denunciar post Postado Maio 21, 2014 A ação EXCLUIR já me soa lógica errada. :coolio: Compartilhar este post Link para o post Compartilhar em outros sites
PaivaJr 0 Denunciar post Postado Maio 24, 2014 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
ESerra 744 Denunciar post Postado Maio 24, 2014 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
Prog 183 Denunciar post Postado Maio 25, 2014 Apodrecendo não seria o melhor termo para definir, mas sim... :coolio: Compartilhar este post Link para o post Compartilhar em outros sites
PaivaJr 0 Denunciar post Postado Maio 26, 2014 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 744 Denunciar post Postado Maio 26, 2014 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