mysql_acted_rows () возвращает -1 - PullRequest
6 голосов
/ 17 июля 2011

При выполнении оператора SQL, такого как INSERT INTO table ... ON DUPLICATE KEY UPDATE ... Я полагаюсь на mysql_affered_rows (), чтобы определить, была ли выполнена вставка или обновление. как сайт MySQL на http://dev.mysql.com/doc/refman/5.1/en/mysql-affected-rows.html, он гласит:

Для операторов INSERT ... ON DUPLICATE KEY UPDATE значение затрагиваемых строк равно 1, если строка вставляется как новая строка, и 2, если существующая строка обновляется.

Все работало нормально, пока мы не обновились до MySQL 5.1.16, когда во многих запросах mysql_affered_rows () возвращала MINUS ONE (-1)

Предлагаемое решение на сайте MySQL по http://dev.mysql.com/doc/refman/5.1/en/mysql-store-result.html - вызывать функцию mysql_store_result () после каждого выполнения функции mysql_query () в запросе выбора.

Однако в PHP, похоже, такая функция не определена.

Как мне заставить mysql_affered_rows () работать правильно, используя PHP и MySQL 5.1.16?

Ответы [ 2 ]

4 голосов
/ 17 июля 2011

Как правило, если mysql_affected_rows() возвращает -1, это означает, что запрос не выполнен (для получения дополнительной информации см. Справочную страницу ).Вы можете проверить, что это была за ошибка, позвонив по номеру mysql_error(), но вы должны были обнаружить ошибку уже при вызове mysql_query(), прежде чем приступить к выяснению количества строк, затронутых.

Вы спрашиваете о функции store_result, позвольте мне также ответить на эту часть вашего вопроса:

Модуль PHP MySQL может не иметь функции store_result, но более новый модуль MySQLi имеет.См. http://php.net/manual/en/mysqli.store-result.php

Как правило, рекомендуется в любом случае переключаться с использования функций mysql_xxx на эквивалентные функции mysqli_xxx, так что это будет отличная возможность для вас.

Для этого вам не нужно обновлять версию PHP, так как модуль MySQLi был представлен в PHP 5.0.Тем не менее, я бы посоветовал рассмотреть вопрос об обновлении - если вы используете PHP 5.1, вы используете версию, которая не поддерживается уже более пяти лет.

2 голосов
/ 17 июля 2011

mysql_affected_rows возвращает -1, если последний запрос не удался. Я бы проверил ваши запросы и / или соединение с базой данных. Смотрите эту ссылку .

...