(PHP 4, PHP 5)
mysql_affected_rows — Obtém o número de linhas afetadas na operação anterior do MySQL
Esta extensão tornou-se defasada a partir do PHP 5.5.0 e foi removida no PHP 7.0.0. Em vez disso, as extensões MySQLi ou PDO_MySQL devem ser usadas. Veja também o guia MySQL: escolhendo uma API. Alternativas a esta função incluem:
Obtém o número de linhas afetadas pelo último INSERT, UPDATE, REPLACE
ou DELETE associado ao link_identifier
.
link_identifier
A conexão MySQL. Se o
identificador da conexão não for especificado, a última conexão aberta por
mysql_connect() será usada. Se não houver uma conexão anterior,
haverá uma tentativa de criar uma como se mysql_connect() tivesse sido chamada
sem argumentos. Se nenhuma conexão for encontrada ou estabelecida, um erro de nível
E_WARNING
será gerado.
Retona o número de linas afetadas em caso de sucesso, e -1 se a última consulta falhou.
Se a última consulta foi um DELETE sem a claúsula WHERE, todos os registros terão sido excluídos da tabela mas esta função irá retornar zero em versões do MySQL anteriores a 4.1.2.
Ao usar UPDATE, o MySQL não irá atualizar colunas aonde o novo valor é o mesmo que o valor anterior. Isto cria a possibilidade de que mysql_affected_rows() possa não ser igual ao número de linhas encontradas, apenas o número de linhas que literalmente foram afetadas pela consulta.
O comando REPLACE primeiro exclui o registro com a mesma chave primária e então insere o novo registro. Esta função retorna o número de registros excluídos mais o número de registros inseridos.
No caso de consultas "INSERT ... ON DUPLICATE KEY UPDATE", o
valor retornado será 1
se um insert foi executado,
ou 2
para um update de uma linha existente.
Exemplo #1 Exemplo mysql_affected_rows()
<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db('mydb');
/* this should return the correct numbers of deleted records */
mysql_query('DELETE FROM mytable WHERE id < 10');
printf("Records deleted: %d\n", mysql_affected_rows());
/* with a where clause that is never true, it should return 0 */
mysql_query('DELETE FROM mytable WHERE 0');
printf("Records deleted: %d\n", mysql_affected_rows());
?>
O exemplo acima produzirá algo semelhante a:
Records deleted: 10 Records deleted: 0
Exemplo #2 Exemplo de mysql_affected_rows() usando transações
<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db('mydb');
/* Update records */
mysql_query("UPDATE mytable SET used=1 WHERE id < 10");
printf ("Updated records: %d\n", mysql_affected_rows());
mysql_query("COMMIT");
?>
O exemplo acima produzirá algo semelhante a:
Updated Records: 10
Nota: Transações
Se você estiver usando transações, você deve utilizar mysql_affected_rows() depois da sua consulta INSERT, UPDATE, ou DELETE, não depois de COMMIT.
Nota: Comandos SELECT
Para obter o número de linhas retornados por um SELECT, é possível usar mysql_num_rows().
Nota: Chaves estrangeiras em cascata
mysql_affected_rows() não conta linhas afetadas implicitamente pelo uso de ON DELETE CASCADE e/ou ON UPDATE CASCADE em chaves estrangeiras.