mysqli_stmt::$affected_rows

mysqli_stmt_affected_rows

(PHP 5, PHP 7, PHP 8)

mysqli_stmt::$affected_rows -- mysqli_stmt_affected_rowsRetourne 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

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 add a note

User Contributed Notes 2 notes

up
25
Carl Olsen
18 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.
up
-9
Chuck
17 years ago
I'm not sure whether or not this is the intended behavior, but I noticed through testing that if you were to use transactions and prepared statements together and you added a single record to a database using a prepared statement, but later rolled it back, mysqli_stmt_affected_rows will still return 1.
To Top