English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

PHP Основы

PHP Уровень продвинутый

PHP & MySQL

PHP Руководство

PHP mysqli_stmt_affected_rows() Пример использования и пример

PHP MySQLi справочник

Функция mysqli_stmt_affected_rows() возвращает общее количество строк,affected на последнее выполненное заявление.

Определение и использование

mysqli_stmt_affected_rows()Эта функция возвращает количество строк,affected на последнее выполненное (изменение, удаление, вставка) заявление.

Эта функция работает корректно только после вызова INSERT, UPDATE или DELETE заявки. Если вам нужно узнать количество строк,affected на SELECT запрос, вам нужно использовать mysqli_stmt_num_rows() Функция.

Синтаксис

mysqli_stmt_affected_rows($stmt)

Параметр

НомерПараметры и описание
1

stmt(обязателен)

Это объект запроса, который представляет собой выполнение SQL-запроса.

Возвратное значение

Функция PHP mysqli_stmt_affected_rows() возвращает целое значение, которое указывает на количество строк,affected на предыдущем (INSERT, UPDATE, REPLACE или DELETE) операции.

Если в заявке есть ошибка, то функция возвращает-1. Если функция не влияет на строки, то она возвращает0.

Версия PHP

Эта функция была最初 введена в PHP версии 5 и может использоваться во всех более высоких версиях.

Онлайн пример

Предположим, что мы уже создали таблицу с именем employee в базе данных MySQL, и её содержимое是这样的:

mysql> select * from employee;
+------------+--------------+------+------+--------+
| FIRST_NAME | LAST_NAME    | AGE  | SEX  | INCOME |
+------------+--------------+------+------+--------+
| Vinay      | Bhattacharya |   20 | M    |  21000 |
| Sharukh    | Sheik        |   25 | M    |  23300 |
| Trupthi    | Mishra       |   24 | F    |  51000 |
| Sheldon | Cooper | 25 | M | 2256 |
| Sarmista | Sharma | 28 | F | 15000 |
+------------+--------------+------+------+--------+
5 rows in set (0.00 sec)

以下示例演示了mysqli_stmt_affected_rows()函数的用法(面向过程风格),执行update更新数据后,返回受影响的行数:

<?php
   $con = mysqli_connect("localhost", "root", "password", "mydb");
   $stmt = mysqli_prepare($con, "UPDATE employee set INCOME=INCOME-? where INCOME>=?");
   mysqli_stmt_bind_param($stmt, "si", $reduct, $limit);
   $limit = 20000;
   $reduct = 5000;
   //Выполнение команды
   mysqli_stmt_execute($stmt);
   print("已更新的记录......\n");
   //Количество影响的 строк
   $count = mysqli_stmt_affected_rows($stmt);
   //Конец команды
   mysqli_stmt_close($stmt);
   //Закрытие подключения
   mysqli_close($con);
   print("受影响的行 " . $count);
?>

Результат вывода

已更新的记录......
受影响的行 3

Онлайн пример

在面向对象风格中,此函数的语法为$con->affected_rows;。以下是面向对象风格中此函数的示例,执行delete删除数据后,返回受影响的行数:

<?php
   //建立连接
   $con = new mysqli("localhost", "root", "password", "mydb");
   $con -> query("CREATE TABLE Test(Name VARCHAR(255), AGE INT)");
   print("Создание таблицы.....\n");
   $con -> query("insert into Test values('Raju', 25),('Rahman', 30),('Sarmista', 27)");
   print("Вставка записей.....\n");
   $stmt = $con -> prepare("DELETE FROM Test WHERE Name in(?, ?)");
   $stmt->bind_param("ss", $name1, $name2);
   $name1 = 'Raju';
   $name2 = 'Rahman';
   print("Запись уже удалена.....\n");
   //Выполнение команды
   $stmt->execute();
   //Влияет строк
   $count = $stmt->affected_rows;
   print("Количество影响的 строк ").$count;
   //Конец команды
   $stmt->close();
   //Закрытие подключения
   $con->close();
?>

Результат вывода

Создание таблицы.....
Вставка записей.....
Запись уже удалена.....
Количество影响的 строк 2

Онлайн пример

Если запрос не влияет на какие-либо строки, давайте проверим его возвращаемое значение-

<?php
   $con = @mysqli_connect("localhost", "root", "password", "mydb");
   mysqli_query($con, "CREATE TABLE Test(Name VARCHAR(255), AGE INT)");
   print("Создание таблицы.....\n");
   mysqli_query($con, "INSERT INTO Test VALUES('Raju', 25),('Rahman', 30),('Sarmista', 27)");
   print("Вставка записей.....\n");
   $stmt = mysqli_prepare($con, "DELETE FROM test WHERE Age<?");
   mysqli_stmt_bind_param($stmt, "i", $num);
   $num = 8;
   //Выполнение команды
   mysqli_stmt_execute($stmt);
   //Количество影响的 строк
   $count = mysqli_stmt_affected_rows($stmt);
   print("Количество影响的行 (если запрос не выполняет никакие действия): ").$count;
   //Конец команды
   mysqli_stmt_close($stmt);
   //Закрытие подключения
   mysqli_close($con);
?>

Результат вывода

Создание таблицы.....
Вставка записей.....
Количество影响的行 (если запрос не выполняет никакие действия): 0

PHP MySQLi справочник