mysql affected rows php
mysql_affected_rows — Возвращает число затронутых прошлой операцией рядов
Данное расширение устарело, начиная с версии PHP 5.5.0, и будет удалено в будущем. Используйте вместо него MySQLi или PDO_MySQL. Смотрите также инструкцию MySQL: выбор API и соответствующий FAQ для получения более подробной информации. Альтернативы для данной функции:
Описание
Список параметров
Возвращаемые значения
Если последний запрос был DELETE без указания WHERE и, соответственно, таблица была очищена, функция вернёт ноль во всех версиях MySQL до 4.1.2.
При использовании UPDATE, MySQL не обновит колонки, уже содержащие новое значение. Вследствие этого, функция mysql_affected_rows() не всегда возвращает количество рядов, подошедших под условия, только количество рядов, обновлённых запросом.
Запрос REPLACE сначала удаляет запись с указанным первичным ключом, а потом вставляет новую. Данная функция возвращает количество удаленных записей вместе с количеством вставленных.
Примеры
Пример #1 Пример использования mysql_affected_rows()
Результатом выполнения данного примера будет что-то подобное:
Пример #2 Пример использования mysql_affected_rows() с транзакциями
Результатом выполнения данного примера будет что-то подобное:
Примечания
Замечание: Транзакции
При использовании транзакций mysql_affected_rows() нужно вызывать после запросов INSERT, UPDATE, DELETE, но не после COMMIT.
Замечание: Запросы SELECT
Замечание: Каскадные внешние ключи
mysql_affected_rows() не подсчитывает ряды, неявно измененные ограничениями ON DELETE CASCADE и/или ON UPDATE CASCADE.
Смотрите также
mysql_affected_rows
mysql_affected_rows — Возвращает число затронутых прошлой операцией рядов
Данное расширение устарело, начиная с версии PHP 5.5.0, и удалено в PHP 7.0.0. Используйте вместо него MySQLi или PDO_MySQL. Смотрите также инструкцию MySQL: выбор API и соответствующий FAQ для получения более подробной информации. Альтернативы для данной функции:
Описание
Список параметров
Возвращаемые значения
Если последний запрос был DELETE без указания WHERE и, соответственно, таблица была очищена, функция вернёт ноль во всех версиях MySQL до 4.1.2.
При использовании UPDATE, MySQL не обновит колонки, уже содержащие новое значение. Вследствие этого, функция mysql_affected_rows() не всегда возвращает количество рядов, подошедших под условия, только количество рядов, обновлённых запросом.
Запрос REPLACE сначала удаляет запись с указанным первичным ключом, а потом вставляет новую. Данная функция возвращает количество удаленных записей вместе с количеством вставленных.
Примеры
Пример #1 Пример использования mysql_affected_rows()
Результатом выполнения данного примера будет что-то подобное:
Пример #2 Пример использования mysql_affected_rows() с транзакциями
Результатом выполнения данного примера будет что-то подобное:
Примечания
Замечание: Транзакции
При использовании транзакций mysql_affected_rows() нужно вызывать после запросов INSERT, UPDATE, DELETE, но не после COMMIT.
Замечание: Запросы SELECT
Замечание: Каскадные внешние ключи
mysql_affected_rows() не подсчитывает ряды, неявно измененные ограничениями ON DELETE CASCADE и/или ON UPDATE CASCADE.
Смотрите также
mysqli::$affected_rows
Описание
Список параметров
Возвращаемые значения
Если число затронутых строк больше чем максимальное значение целого числа ( PHP_INT_MAX ), то число затронутых строк будет возвращено в виде строки.
Примеры
Результат выполнения данных примеров:
Смотрите также
User Contributed Notes 6 notes
On «INSERT INTO ON DUPLICATE KEY UPDATE» queries, though one may expect affected_rows to return only 0 or 1 per row on successful queries, it may in fact return 2.
From Mysql manual: «With ON DUPLICATE KEY UPDATE, the affected-rows value per row is 1 if the row is inserted as a new row and 2 if an existing row is updated.»
Here’s the sum breakdown _per row_:
+0: a row wasn’t updated or inserted (likely because the row already existed, but no field values were actually changed during the UPDATE)
+1: a row was inserted
+2: a row was updated
While using prepared statements, even if there is no result set (Like in an UPDATE or DELETE), you still need to store the results before affected_rows returns the actual number:
If you need to know specifically whether the WHERE condition of an UPDATE operation failed to match rows, or that simply no rows required updating you need to instead check mysqli::$info.
As this returns a string that requires parsing, you can use the following to convert the results into an associative array.
Object oriented style:
For any UPDATE operation the array returned will have the following elements:
Array
(
[Rows matched] => 1
[Changed] => 0
[Warnings] => 0
)
This may seem obvious, but if you do an UPDATE with each of the values in your SET clause having the exact same value that is already in the table, then affected_rows returns 0. For example:
mysql_affected_rows
mysql_affected_rows — Возвращает число затронутых прошлой операцией рядов
Данный модуль устарел, начиная с версии PHP 5.5.0, и удалён в PHP 7.0.0. Используйте вместо него MySQLi или PDO_MySQL. Смотрите также инструкцию MySQL: выбор API. Альтернативы для данной функции:
Описание
Список параметров
Возвращаемые значения
Если последний запрос был DELETE без указания WHERE и, соответственно, таблица была очищена, функция вернёт ноль во всех версиях MySQL до 4.1.2.
При использовании UPDATE, MySQL не обновит колонки, уже содержащие новое значение. Вследствие этого, функция mysql_affected_rows() не всегда возвращает количество рядов, подошедших под условия, только количество рядов, обновлённых запросом.
Запрос REPLACE сначала удаляет запись с указанным первичным ключом, а потом вставляет новую. Данная функция возвращает количество удалённых записей вместе с количеством вставленных.
Примеры
Пример #1 Пример использования mysql_affected_rows()
Результатом выполнения данного примера будет что-то подобное:
Пример #2 Пример использования mysql_affected_rows() с транзакциями
Результатом выполнения данного примера будет что-то подобное:
Примечания
Замечание: Транзакции
При использовании транзакций mysql_affected_rows() нужно вызывать после запросов INSERT, UPDATE, DELETE, но не после COMMIT.
Замечание: Запросы SELECT
Замечание: Каскадные внешние ключи
mysql_affected_rows() не подсчитывает ряды, неявно изменённые ограничениями ON DELETE CASCADE и/или ON UPDATE CASCADE.
Смотрите также
User Contributed Notes 11 notes
So if you use one SQL request to insert several rows at a time, and some are inserted, some are just updated, you won’t get the real count.
SCENARIO
1. You’re using MySQL 4.1x with foreign keys.
2. You have table t2 linked to table t1 by a CASCADE ON DELETE foreign key.
3. t2 has a UNIQUE key so that duplicate records are unacceptable.
3. You have a REPLACE query on t1 followed by an INSERT query on t2 and expect the second query to fail if there’s an attempted insert of a duplicate record.
PROBLEM
You notice that the second query is not failing as you had expected even though the record being inserted is an exact duplicate of a record previously inserted.
CAUSE
When the first query (the REPLACE query) deletes a record from t1 in the first stage of the REPLACE operation, it cascades the delete to the record that would be duplicated in t2. The second query then does not fail because the «duplicate» record is no longer a duplicate, as the original one has just been deleted.
calling mysql_affected_rows(null)
is not the same that calling mysql_affected_rows()
if($link)
$n=mysql_affected_rows($link);
else
$n=mysql_affected_rows();
Note that when the CLIENT_FOUND_ROWS connection flag was used, affected_rows returns the number of rows matched by the WHERE condition of an UPDATE query, even if the query doesn’t actually change those rows. I.e. for
INSERT INTO t(id, val) VALUES (1, ‘x’);
UPDATE t SET val = ‘x’ WHERE />
the number of affected rows will be 0 normally but 1 with CLIENT_FOUND_ROWS.
Here’s a little function I’ve been using for a while now, pass it two parameters (action command (1 or 0 see notes)) and a sql statement.
I’ve found this invaluable when trying to tie down large amounts of updates to a table, using this you can easily see where a query was successfully executed and the number of rows are affected, or where there are problems and a statement has failed for example.
mysql_affected_rows() in php [duplicate]
and invoke this by
And have a next error:
4 Answers 4
You shutdown the connection
If you want to use it later in your script you shouldn’t do this 😉 However, because PHP closes all open itself at the scripts end you don’t need to close it yourself at all.
Update (Just to avoid the next question ;))
Get the number of affected rows by the last INSERT, UPDATE, REPLACE or DELETE
and you are using SELECT..
For SELECT, SHOW, DESCRIBE, EXPLAIN and other statements returning resultset, mysql_query() returns a resource on success, or FALSE on error.
hope that solves your problem. you do need to change bit of code to handle this.
Get the number of affected rows by the last INSERT, UPDATE, REPLACE or DELETE query associated with link_identifier.
This is the signature for mysql_affected_rows():
Get the number of affected rows by the last INSERT, UPDATE, REPLACE or DELETE query associated with link_identifier.
link_identifier The MySQL connection. If the link identifier is not specified, the last link opened by mysql_connect() is assumed. If no such link is found, it will try to create one as if mysql_connect() was called with no arguments. If no connection is found or established, an E_WARNING level error is generated.
So it requires an open link to the DB. However, your getDataFromDbByQuery() method closes the connection before you call the function: