English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Функция 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 версии 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