mysqli_stmt::$affected_rows

mysqli_stmt_affected_rows

(PHP 5, PHP 7, PHP 8)

mysqli_stmt::$affected_rows -- mysqli_stmt_affected_rows — Retourne le nombre total de lignes modifiĂ©es, effacĂ©es, insĂ©rĂ©es, ou correspondant par la derniĂšre requĂȘte

Description

Style orienté objet

Style procédural

function mysqli_stmt_affected_rows(mysqli_stmt $statement): int|string

Retourne le nombre de lignes affectĂ©es par une requĂȘte INSERT, UPDATE ou DELETE. Fonctionne comme mysqli_stmt_num_rows() pour les requĂȘtes SELECT.

Liste de paramĂštres

statement
Style procédural uniquement : Un objet mysqli_stmt retourné par la fonction mysqli_stmt_init().

Valeurs de retour

Un entier plus grand que zĂ©ro indique le nombre de lignes affectĂ©es ou recherchĂ©es. ZĂ©ro indique qu'aucun enregistrement n'a Ă©tĂ© modifiĂ© par une requĂȘte du type UPDATE, aucune ligne ne correspond Ă  la clause WHERE dans la requĂȘte ou bien qu'aucune requĂȘte n'a Ă©tĂ© exĂ©cutĂ©e. -1 indique que la requĂȘte a retournĂ© une erreur ou que, pour une requĂȘte SELECT, mysqli_stmt_affected_rows() a Ă©tĂ© appelĂ© avant d'appeler mysqli_stmt_store_result().

Note:

Si le nombre de lignes affectées est plus grand que la valeur maximale (PHP_INT_MAX) que peut prendre un entier, le nombre de lignes affectées sera retourné en tant que chaßne de caractÚres.

Exemples

Exemple #1 Exemple de mysqli_stmt_affected_rows()

Style orienté objet

<?php
mysqli_report
(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* Création d'une table temporaire */
$mysqli->query("CREATE TEMPORARY TABLE myCountry LIKE Country");

$query = "INSERT INTO myCountry SELECT * FROM Country WHERE Code LIKE ?";

/* PrĂ©paration de la requĂȘte */
$stmt = $mysqli->prepare($query);

/* Lie une variable Ă  un paramĂštre fictif */
$code = 'A%';
$stmt->bind_param("s", $code);

/* ExĂ©cution de la requĂȘte */
$stmt->execute();

printf("Lignes insérées : %d\n", $stmt->affected_rows);
?>

Style procédural

<?php
mysqli_report
(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$link = mysqli_connect("localhost", "my_user", "my_password", "world");

/* Création d'une table temporaire */
mysqli_query($link, "CREATE TEMPORARY TABLE myCountry LIKE Country");

$query = "INSERT INTO myCountry SELECT * FROM Country WHERE Code LIKE ?";

/* PrĂ©paration de la requĂȘte */
$stmt = mysqli_prepare($link, $query);

/* Lie une variable Ă  un paramĂštre fictif */
$code = 'A%';
mysqli_stmt_bind_param($stmt, "s", $code);

/* ExĂ©cution de la requĂȘte */
mysqli_stmt_execute($stmt);

printf("Lignes insérées : %d\n", mysqli_stmt_affected_rows($stmt));
?>

L'exemple ci-dessus va afficher :

Lignes insérées : 17

Voir aussi

add a note

User Contributed Notes 1 note

up
30
Carl Olsen ¶
20 years ago
It appears that an UPDATE prepared statement which contains the same data as that already in the database returns 0 for affected_rows.  I was expecting it to return 1, but it must be comparing the input values with the existing values and determining that no UPDATE has occurred.