Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Diferenciar entre 'nenhuma linha foi afetada' e linhas atualizadas com sucesso - para o mesmo valor (MySQL e PHP)


Uma solução simples seria duas consultas.

Primeiro, execute uma consulta SELECT para verificar se a linha existe usando mysqli_num_rows().

Então, se a linha existir, você pode executar a consulta UPDATE e usar mysqli_affected_rows().

[EDITAR]

...Vou sugerir uma alternativa potencial para quem procura uma única chamada. Não sei se você está interessado em fazer algum INSERTs, ou puramente UPDATEs. Abaixo, alguns alimentos para reflexão:

Do comentário superior @ http://php.net/manual/en/ mysqli.affected-rows.php :

Em consultas "INSERT INTO ON DUPLICATE KEY UPDATE", embora se possa esperar que as linhas_ afetadas retornem apenas 0 ou 1 por linha em consultas bem-sucedidas, ele pode, na verdade, retornar 2.

Do manual do Mysql:"Com ON DUPLICATE KEY UPDATE, o valor das linhas afetadas por linha é 1 se a linha for inserida como uma nova linha e 2 se uma linha existente for atualizada."

Veja:http://dev.mysql.com /doc/refman/5.0/en/insert-on-duplicate.html

Aqui está o detalhamento da soma por linha :

+0:​​uma linha não foi atualizada ou inserida (provavelmente porque a linha já existia, mas nenhum valor de campo foi realmente alterado durante o UPDATE)

+1:uma linha foi inserida

+2:uma linha foi atualizada

Você pode fazer isso se adequar às suas necessidades?