mysqli_stmt::$affected_rows

mysqli_stmt_affected_rows

(PHP 5, PHP 7)

mysqli_stmt::$affected_rows -- mysqli_stmt_affected_rows gibt die gesamte Anzahl der Zeilen zurück, die bei der letzten ausgeführten Anweisung geändert, gelöscht oder eingefügt worden sind

Beschreibung

Objektorientierter Stil

Prozeduraler Stil

int mysqli_stmt_affected_rows ( mysqli_stmt $stmt )

Gibt die Anzahl der Zeilen zurück, die bei einer INSERT, UPDATE oder DELETE Abfrage beeinflusst worden sind.

Die Funktion arbeitet nur mit Abfragen, die eine Tabelle aktualisieren. Um die Anzahl der Zeilen einer SELECT-Abfrage zu bekommen, ist stattdessen mysqli_stmt_num_rows() zu verwenden.

Parameter-Liste

stmt

Nur bei prozeduralem Aufruf: ein von mysqli_stmt_init() zurückgegebenes Statementobjekt.

Rückgabewerte

Ein Integer-Wert größer als Null zeigt die Anzahl der beeinflussten Zeilen an. Null zeigt an, dass bei einer UPDATE/DELETE-Anweisung keine Datensätze beeinflusst worden sind, dass keine Zeilen die WHERE-Bedingung der Anweisung erfüllt haben, oder dass keine Anweisung ausgeführt wurde. -1 zeigt an, dass die Abfrage einen Fehler zurückgegeben hat. NULL zeigt an, dass die Abfrage mit einem ungültigen Argument aufgerufen wurde.

Hinweis:

Ist die Anzahl der beeinflussten Zeilen größer als der maximal erlaubte Wert eines PHP-Integers, wird die Anzahl der beeinflussten Zeilen als String-Wert zurück gegeben.

Beispiele

Beispiel #1 Objektorientierter Stil

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

/* Verbindung prüfen */
if (mysqli_connect_errno()) {
    
printf("Verbindung fehlgeschlagen: %s\n"mysqli_connect_error());
    exit();
}

/* temporäre Tabelle erzeugen */
$mysqli->query("CREATE TEMPORARY TABLE myCountry LIKE Country");

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

/* Anweisung vorbereiten */
if ($stmt $mysqli->prepare($query)) {

    
/* Variable an Platzhalter binden */
    
$code 'A%';
    
$stmt->bind_param("s"$code);

    
/* Anweisung ausführen */
    
$stmt->execute();

    
printf("eingefügte Zeilen: %d\n"$stmt->affected_rows);

    
/* Anweisung schließen */
    
$stmt->close();
}

/* Verbindung schließen */
$mysqli->close();
?>

Beispiel #2 Prozeduraler Stil

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

/* Verbindung prüfen */
if (mysqli_connect_errno()) {
    
printf("Verbindung fehlgeschlagen: %s\n"mysqli_connect_error());
    exit();
}

/* temporäre Tabelle erzeugen */
mysqli_query($link"CREATE TEMPORARY TABLE myCountry LIKE Country");

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

/* Anweisung vorbereiten */
if ($stmt mysqli_prepare($link$query)) {

    
/* Variable an Platzhalter binden */
    
$code 'A%';
    
mysqli_stmt_bind_param($stmt"s"$code);

    
/* Anweisung ausführen */
    
mysqli_stmt_execute($stmt);

    
printf("eingefügte Zeilen: %d\n"mysqli_stmt_affected_rows($stmt));

    
/* Anweisung schließen */
    
mysqli_stmt_close($stmt);
}

/* Verbindung schließen */
mysqli_close($link);
?>

Die obigen Bespiele erzeugen folgende Ausgabe:

eingefügte Zeilen: 17

Siehe auch

add a note add a note

User Contributed Notes 3 notes

up
19
Carl Olsen
10 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
1
gerbawn at 163 dot com
1 year ago
I find should add $stmt->store_result() after $stmt->execute(), otherwise you can't get right results when use $stmt->affected_rows
up
1
Chuck
9 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