Jump to content
Ivan22

ajuda com ON DUPLICATE KEY

Recommended Posts

Ivan22

boas pessoal

queria saber se há alguma função do php que teste o erro sql ON DUPLICATE KEY?

eu já faço o mysql_affected_rows() para testar o INSERT

e no retorno falso, queria saber se o erro deve-se a entrada duplicada de campos únicos.

não sei se me fiz entender....

Share this post


Link to post
Share on other sites
ruimcosta

Biba,

Como tens estruturada a tabela no mysql?


Abraços e beijinhos,Rui Costa

Share this post


Link to post
Share on other sites
Ivan22

a tabela tem 3 campos.

dois deles são chaves estrangeiras, coloquei-os como valor único por registo.

Share this post


Link to post
Share on other sites
brunoais

Mostra o código que usaste para criar as tabelas ou um código gerado pelo phpmyadmin para exportar as tabelas sff.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
Ivan22

ok

por exemplo:

CREATE TABLE `gestao_conta`.`relacao` (

`id_a` INT( 11 ) UNSIGNED NOT NULL ,

`id_b` INT( 11 ) UNSIGNED NOT NULL ,

`estado` ENUM( 'activo', 'pendente', 'removido', 'pausado' ) NOT NULL ,

UNIQUE (

`id_a` ,

`id_b`

)

) ENGINE = MYISAM ;

Share this post


Link to post
Share on other sites
brunoais

Não existem chaves estrangeiras em MYISAM.

(manual de instruções do php:

http://www.php.net/manual/en/function.mysql-affected-rows.php#76135

data: 02-Jul-2007 10:21

If you use "INSERT INTO ... ON DUPLICATE KEY UPDATE" syntax, mysql_affected_rows() will return you 2 if the UPDATE was made (just as it does with the "REPLACE INTO" syntax) and 1 if the INSERT was.

So if you use one SQL request to insert several rows at a time, and some are inserted, some are just updated, you won't get the real count.

)

Não sei bem o que é que tu queres testar... Podes dar um exemplo de o que tu queres?


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
Ivan22

tenho parte do meu codigo de exemplo

<?php

mysql_query("INSERT INTO relacao(id_a,id_b,estado) VALUES ('10','20','pausado')");

if(mysql_affected_rows() <=0){ //retorno falso

    /* aqui se houvesse maneira

      de saber que o erro do sql foi duplicate key escusava de fazer o SELECT */

    $select=mysql_query("SELECT * FROM relacao WHERE id_a='10' AND id_b='20' AND estado='aceite'");

   

        if(mysql_num_rows($select)==1){

             

              mysql_query("UPDATE relacao SET estado='pausado' WHERE id_a='10' AND id_b='20'");

        }else{

        return false;

        }

}

else{

 

  return mysql_insert_id();

}

?>

Share this post


Link to post
Share on other sites
brunoais

Então o que eu respondi com o quote não serve para ti?


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
Ivan22

não serve,  porque a minha sintase do INSERT não faço recorrência com ON DUPLICATE KEY UPDATE

o mysql_affected_rows() dara sempre zero..

...só queria saber se há forma de identificar o erro de registo duplicado pelo php

Share this post


Link to post
Share on other sites
ruimcosta

Ivan

Se não queres fazer as coisas como deve de ser, fazes como NÃO deve de ser.

Se queres testar, força a inserção de um duplicado e vês a mensagem que te da.... Se não houver um ponto de diferenciação com outros erros que possam surgir com o SQL nada feito.

Agora o pessoal ensina-te a resolver "a coisa" e tu dizes que não serve porque não queres utilizar ON DUPLICATE KEY UPDATE na tua instrução.

Daqui a nada alguém dá-te outra "fórmula mágica" e tu dizes que não serve porque não queres alterar o ponto final para ponto e vírgula...

Haja paciência.

:wallbash:


Abraços e beijinhos,Rui Costa

Share this post


Link to post
Share on other sites
ruimcosta

De vez em quando é preciso agitarmos as águas...  :cheesygrin:

Já puseste isso a funcionar? Segue o exemplo do Bruno


Abraços e beijinhos,Rui Costa

Share this post


Link to post
Share on other sites
Ivan22

ya percebo hahaaa

o meu código sempre funcionou só que eu faço um SELECT quando o retorno é falso

e o que queria era evitar isso.

mas não há outra hipótese de fazer. 

vou deixar o código como está

até porque o ON DUPLICATE KEY UPDATE não deixa fazer uma condição na query.

obrigado de qualquer forma, pessoal :cheesygrin:

Share this post


Link to post
Share on other sites
brunoais

O ON DUPLICATE KEY UPDATE é uma condição em si...

Agora a sério... qual é o problema (dúvida, impasse, etc....)?


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.