mysqli_stmt::$affected_rows
mysqli_stmt_affected_rows
(PHP 5)
mysqli_stmt::$affected_rows -- mysqli_stmt_affected_rows — Возвращает общее количество строк, измененных, удаленных или добавленных последним выполненным выражением
Описание
Объектно-ориентированный стиль
Процедурный стиль
Возвращает количество строк, измененных запросом INSERT, UPDATE или DELETE.
Эта функция работает только с запросами, обновляющими таблицу. Для получения количества строк для запроса SELECT используйте вместо нее mysqli_stmt_num_rows().
Список параметров
-
stmt
-
Только для процедурного стиля: Идентификатор выражения, полученный с помощью mysqli_stmt_init().
Возвращаемые значения
Целое число больше нуля показывает количество измененных или найденных строк. Ноль показывает, что не было обновлено ни одной записи для оператора UPDATE/DELETE, ни одна строка не удовлетворила условию WHERE в запросе или что ни один запрос еще не выполнен. -1 показывает, что запрос выполнен с ошибкой. NULL показывает, что функция получила неверный аргумент.
Замечание:
Если количество измененных строк больше, чем максимальное значение для типа int в PHP, то это количество будет возвращено в виде строкового значения.
Примеры
Пример #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();
?>
Пример #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() - Возвращает число строк в результате запроса
- mysqli_prepare() - Подготавливает SQL выражение к выполнению
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Расширения для работы с базами данных
- Расширения для работы с базами данных отдельных производителей
- MySQL Drivers and Plugins
- Улучшенный модуль MySQL
- mysqli_stmt::$affected_rows
- Функция mysqli_stmt::attr_get() - Получает текущее значение атрибута запроса
- Функция mysqli_stmt::attr_set() - Изменяет поведение подготовленного запроса
- Функция mysqli_stmt::bind_param() - Привязка переменных к параметрам подготавливаемого запроса
- Функция mysqli_stmt::bind_result() - Привязка переменных к подготавленному запросу для размещения результата
- Функция mysqli_stmt::close() - Закрывает подготовленный запрос
- mysqli_stmt::__construct
- Функция mysqli_stmt::data_seek() - Переход к заданной строке в результирующем наборе
- Функция mysqli_stmt::$errno() - Возвращает код ошибки выполнения последнего запроса
- Функция mysqli_stmt::$error_list() - Возвращает список ошибок выполнения последнего запроса
- Функция mysqli_stmt::$error() - Возвращает строку с пояснением последней ошибки при выполнении запроса
- Функция mysqli_stmt::execute() - Выполняет подготовленный запрос
- Функция mysqli_stmt::fetch() - Связывает результаты подготовленного выражения с переменными
- Функция mysqli_stmt::$field_count() - Возвращает число полей в заданном выражении
- Функция mysqli_stmt::free_result() - Освобождает память от результата запроса, указанного дескриптором
- Функция mysqli_stmt::get_result() - Получает результат из подготовленного запроса
- Функция mysqli_stmt::get_warnings() - Получает результат от SHOW WARNINGS
- Функция mysqli_stmt::$insert_id() - Получает ID сгенерированный предыдущей операцией INSERT
- Функция mysqli_stmt::more_results() - Проверяет, есть ли еще наборы строк в результате мультизапроса
- Функция mysqli_stmt::next_result() - Читает следующий набор строк из мультизапроса
- Функция mysqli_stmt::$num_rows() - Возвращает число строк в результате запроса
- Функция mysqli_stmt::$param_count() - Возвращает количество параметров в запросе
- Функция mysqli_stmt::prepare() - Подготовка SQL запроса к выполнению
- Функция mysqli_stmt::reset() - Сбрасывает результаты выполнения подготовленного запроса
- Функция mysqli_stmt::result_metadata() - Возвращает метаданные результирующей таблицы подготавливаемого запроса
- Функция mysqli_stmt::send_long_data() - Отправка данных блоками
- mysqli_stmt::$sqlstate
- Функция mysqli_stmt::store_result() - Передает результирующий набор запроса на клиента
Коментарии
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.
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.