downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

mysqli::autocommit> <MySQLi
Last updated: Fri, 14 Aug 2009

view this page in

mysqli->affected_rows

mysqli_affected_rows

(PHP 5)

mysqli->affected_rows -- mysqli_affected_rowsRetourne le nombre de lignes affectées par la dernière opération MySQL

Description

Style orienté objet :

int $affected_rows;

Style procédural :

int mysqli_affected_rows ( mysqli $link )

Retourne le nombre de lignes affectées par la dernière requête INSERT, UPDATE, REPLACE ou DELETE associée au paramètre link .

Pour les requêtes de sélection, la fonction mysqli_affected_rows() fonctionne de la même façon que la fonction mysqli_num_rows().

Liste de paramètres

link

Seulement en style procédural : Un identifiant de lien retourné par la fonction mysqli_connect() ou par la fonction mysqli_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.

Note: Si le nombre de lignes affectées est plus grand que la valeur maximale que peut prendre un entier, le nombre de lignes affectées sera retourné en tant que chaîne de caractères.

Exemples

Exemple #1 Style orienté objet

<?php
$mysqli 
= new mysqli("localhost""my_user""my_password""world");

/* Vérification de la connexion */
if (mysqli_connect_errno()) {
    
printf("Erreur de connexion : %s\n"mysqli_connect_error());
    exit();
}

/* Insertion d'une ligne */
$mysqli->query("CREATE TABLE Language SELECT * from CountryLanguage");
printf("Nombre de lignes affectées (INSERT): %d\n"$mysqli->affected_rows);

$mysqli->query("ALTER TABLE Language ADD Status int default 0");

/* Modification d'une ligne */
$mysqli->query("UPDATE Language SET Status=1 WHERE Percentage > 50");
printf("Nombre de lignes affectées (UPDATE): %d\n"$mysqli->affected_rows);

/* Effacement d'une ligne */
$mysqli->query("DELETE FROM Language WHERE Percentage < 50");
printf("Nombre de lignes affectées (DELETE): %d\n"$mysqli->affected_rows);

/* Sélection de toutes les lignes */
$result $mysqli->query("SELECT CountryCode FROM Language");
printf("Nombre de lignes affectées (SELECT): %d\n"$mysqli->affected_rows);

$result->close();

/* Delete table Language */
$mysqli->query("DROP TABLE Language");

/* Fermeture de la connexion */
$mysqli->close();
?>

Exemple #2 Style procédural

<?php
$link 
mysqli_connect("localhost""my_user""my_password""world");

if (!
$link) {
    
printf("Connexion impossible à localhost. Erreur : %s\n"mysqli_connect_error());
    exit();
}

/* Insertion d'une ligne */
mysqli_query($link"CREATE TABLE Language SELECT * from CountryLanguage");
printf("Nombre de lignes affectées (INSERT): %d\n"mysqli_affected_rows($link));

mysqli_query($link"ALTER TABLE Language ADD Status int default 0");

/* Modification d'une ligne */
mysqli_query($link"UPDATE Language SET Status=1 WHERE Percentage > 50");
printf("Nombre de lignes affectées (UPDATE): %d\n"mysqli_affected_rows($link));

/* Effacement d'une ligne */
mysqli_query($link"DELETE FROM Language WHERE Percentage < 50");
printf("Nombre de lignes affectées (DELETE): %d\n"mysqli_affected_rows($link));

/* Selection de toutes les lignes */
$result mysqli_query($link"SELECT CountryCode FROM Language");
printf("Nombre de lignes affectées (SELECT): %d\n"mysqli_affected_rows($link));

mysqli_free_result($result);

/* Effacement de la table "language" */
mysqli_query($link"DROP TABLE Language");

/* Fermeture de la connexion */
mysqli_close($link);
?>

L'exemple ci-dessus va afficher :

Nombre de lignes affectées (INSERT): 984
Nombre de lignes affectées (UPDATE): 168
Nombre de lignes affectées (DELETE): 815
Nombre de lignes affectées (SELECT): 169

Voir aussi

  • mysqli_num_rows() - Retourne le nombre de lignes dans un résultat
  • mysqli_info() - Retourne des informations à propos de la dernière requête exécutée



add a note add a note User Contributed Notes
mysqli->affected_rows
oilpc at oilpc dot com
14-Nov-2009 07:06
For "INSERT" or "UPDATE" statement for modifying data contained in one row of one table I checked if number of affected rows equals 1 to determine success of the operation. It works fine both for errors and false value of WHERE condition (that might be generated according to specific application user acces privileges).
<?php
if ($mysqli->affected_rows==1){
    echo
"success";
}
else {
    echo
"fail";
}
?>

Checking if mysqli->affected_rows will equal -1 or not is not a good method of determining success of "INSERT IGNORE" statements. Example: Ignoring duplicate key errors while inserting some rows containing data provided by user only if they will match specified unique constraint causes returning of -1 value by mysqli->affected_rows even if rows were inserted. (checked on MySQL 5.0.85 linux and php 5.2.9-2 windows). However mysqli->sqlstate returns no error if statement was executed successfully.
<?php
if ($mysqli->affected_rows!=-1){
    echo
"success";// for "INSERT IGNORE" statements will not occur if there were any duplicate key errors ignored during execution of the query
}
else {
    echo
"fail";// "INSERT IGNORE" statements causing any duplicate key errors (however ignored) lead to mysqli->affected_rows equal -1
}

// Example below works for "INSERT IGNORE" stattements, too
if ($mysqli->sqlstate=="00000"){
    echo
"success";
}
else {
    echo
"fail";
}
?>

mysqli::autocommit> <MySQLi
Last updated: Fri, 14 Aug 2009
 
 
show source | credits | sitemap | contact | advertising | mirror sites