Próbuję uzyskać liczbę wierszy dotkniętych w prostym kwerendy aktualizacji mysql. Jednak po uruchomieniu tego kodu poniżej, PHP mysql_affected_rows() zawsze równa się 0. Nie ma znaczenia, że już foo = 1 (w takim przypadku funkcja powinna poprawnie zwrócić 0, ponieważ nie zmieniono żadnych wierszy), lub jeśli foo jest obecnie równa inna liczba całkowita (w takim przypadku funkcja powinna zwrócić 1).mysql_affected_rows() zwraca 0 dla instrukcji UPDATE, nawet jeśli aktualizacja faktycznie się dzieje
$updateQuery = "UPDATE myTable SET foo=1 WHERE bar=2";
mysql_query($updateQuery);
if (mysql_affected_rows() > 0) {
echo "affected!";
}
else {
echo "not affected"; // always prints not affected
}
Instrukcja UPDATE sama w sobie działa. INT zmienia się w mojej bazie danych. Sprawdziłem również dwukrotnie, czy połączenie z bazą danych nie jest wcześniej zamykane, czy coś ciekawego. Należy pamiętać, że mysql_affected_rows nie wymaga podania identyfikatora połączenia, chociaż ja też tego próbowałem.
Szczegóły dotyczące funkcji: mysql_affected_rows
jakieś pomysły?
jesteś pewien zapis jest aktualizowany? Upewnij się, że ustawiłeś foo na wartość inną niż 1 przed uruchomieniem testu. – northpole
Czy przypadkiem Twoja strona mogłaby zostać wywołana dwa razy, na przykład z powodu przepisania reguły? To spowodowałoby aktualizację danych za pierwszym razem, a nie za drugim razem, gdy zobaczysz ostateczne wyjście ... Nie zaszkodzi sprawdzić dzienniki serwera WWW. –
Czy potwierdziłeś, że faktycznie zwraca 0, a nie wartość ujemną? – Jodaka