Почему mysql_affered_rows возвращает 0, даже если одна запись должна быть обновлена - PullRequest
0 голосов
/ 21 декабря 2009
mysql_query("update users set balance=balance+'$pwbalance'-'$totalprice' where memberid='$memberid' and (balance+'$pwbalance'-'$totalprice')>=0")or die(mysql_error());
$count=mysql_affected_rows();

Когда я повторяю баланс, это 40,00; когда я повторяю $ totalprice, это 40; Так что должна быть одна запись для обновления. Однако, когда я показываю $ count, я получаю 0. Что не так?

Ответы [ 2 ]

7 голосов
/ 21 декабря 2009

MySQL фактически обновляет строку только в том случае, если будет существенная разница до и после обновления. Ваш расчет в основном:

SET balance = balance + 40 - 40

Так что ничего не изменится, и MySQL не будет считать это как затронутую строку.

Примечание: не заключайте в кавычки числовые значения в sql. одинарные кавычки действуют как разделители строк. Для mysql в этом случае они автоматически конвертируются в числа, но это, во всяком случае, плохая практика.

0 голосов
/ 21 декабря 2009

Роланд прав, очевидно, вы хотите знать, был ли запрос успешным, тот факт, что баланс остался прежним, для вас не важен. Возможно, вы захотите добавить новое поле, например purchase_count, которое вы увеличиваете в этом обновлении, или last_purchase_date, чтобы вызвать фактическое обновление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...