文字

mysqli_stmt::$affected_rows

mysqli_stmt_affected_rows

(PHP 5)

mysqli_stmt::$affected_rows -- mysqli_stmt_affected_rowsReturns the total number of rows changed, deleted, or inserted by the last executed statement

说明

面向对象风格

int $mysqli_stmt->affected_rows ;

过程化风格

int mysqli_stmt_affected_rows ( mysqli_stmt $stmt )

Returns the number of rows affected by INSERT, UPDATE, or DELETE query.

This function only works with queries which update a table. In order to get the number of rows from a SELECT query, use mysqli_stmt_num_rows() instead.

参数

stmt

仅以过程化样式:由 mysqli_stmt_init() 返回的 statement 标识。

返回值

An integer greater than zero indicates the number of rows affected or retrieved. Zero indicates that no records where updated for an UPDATE/DELETE statement, no rows matched the WHERE clause in the query or that no query has yet been executed. -1 indicates that the query has returned an error. NULL indicates an invalid argument was supplied to the function.

Note:

If the number of affected rows is greater than maximal PHP int value, the number of affected rows will be returned as a string value.

范例

Example #1 面向对象风格

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


if ( mysqli_connect_errno ()) {
    
printf ( "Connect failed: %s\n" mysqli_connect_error ());
    exit();
}


$mysqli -> query ( "CREATE TEMPORARY TABLE myCountry LIKE Country" );

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


if ( $stmt  $mysqli -> prepare ( $query )) {

    

    
$code  'A%' ;
    
$stmt -> bind_param ( "s" $code );

    

    
$stmt -> execute ();

    
printf ( "rows inserted: %d\n" $stmt -> affected_rows );

    

    
$stmt -> close ();
}


$mysqli -> close ();
?>

Example #2 过程化风格

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


if ( mysqli_connect_errno ()) {
    
printf ( "Connect failed: %s\n" mysqli_connect_error ());
    exit();
}


mysqli_query ( $link "CREATE TEMPORARY TABLE myCountry LIKE Country" );

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


if ( $stmt  mysqli_prepare ( $link $query )) {

    

    
$code  'A%' ;
    
mysqli_stmt_bind_param ( $stmt "s" $code );

    

    
mysqli_stmt_execute ( $stmt );

    
printf ( "rows inserted: %d\n" mysqli_stmt_affected_rows ( $stmt ));

    

    
mysqli_stmt_close ( $stmt );
}


mysqli_close ( $link );
?>

以上例程会输出:

rows inserted: 17

参见

  • mysqli_stmt_num_rows() - Return the number of rows in statements result set
  • mysqli_prepare() - Prepare an SQL statement for execution

用户评论:

[#1] gerbawn at 163 dot com [2015-01-27 06:47:10]

I find should add $stmt->store_result() after $stmt->execute(), otherwise you can't get right results when use $stmt->affected_rows

[#2] Chuck [2007-04-28 22:51:16]

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.

[#3] Carl Olsen [2005-12-27 10:34:42]

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.

上一篇: 下一篇: