2011-07-17 10 views
5

Podczas wykonywania instrukcji SQL, takich jak wstawić do table ... ON duplikat KEY UPDATE ... mogę liczyć na mysql_affected_rows(), aby określić, czy wkładka lub aktualizacja została wykonana. jako miejsce mysql na http://dev.mysql.com/doc/refman/5.1/en/mysql-affected-rows.html, stwierdza:mysql_affected_rows() zwraca -1

Dla INSERT ... ON duplikat KEY instrukcji UPDATE, dotkniętych-wiersze wartość 1, jeśli rząd dodaje się jako nowy wiersz i 2, jeżeli istniejący rząd jest zaktualizowane.

Wszystko działa OK, aż zostaliśmy przeniesieni do MySQL 5.1.16, kiedy wiele zapytań teraz miał mysql_affected_rows() powracającego minus jeden (-1)

Proponowane rozwiązanie na stronie MySQL na http://dev.mysql.com/doc/refman/5.1/en/mysql-store-result.html jest wywołanie funkcja mysql_store_result() po każdym uruchomieniu funkcji mysql_query() w zapytaniu wyboru.

Jednak PHP nie ma zdefiniowanej takiej funkcji.

Jak uzyskać poprawne działanie mysql_affected_rows() przy użyciu PHP i MySQL 5.1.16?

+0

Czy korzystasz z przygotowanych wyciągów? Nawiasem mówiąc, PHP ma funkcję store_result - http://php.net/manual/en/mysqli.store-result.php, ale store_result jest wywoływane po SELECT, a nie po INSERTach. * -1 oznacza, że ​​zapytanie zwróciło błąd lub że dla zapytania SELECT mysql_affected_rows() zostało wywołane przed wywołaniem mysql_store_result() * –

+0

Mam również ten problem ... –

Odpowiedz

2

mysql_affected_rows zwraca -1, jeśli ostatnie zapytanie nie powiodło się. Sprawdziłbym twoje zapytania i/lub połączenie z bazą danych. Zobacz this link.

4

Ogólnie, jeśli mysql_affected_rows() zwraca -1, oznacza to, że zapytanie nie powiodło się (więcej informacji można znaleźć w artykule manual page). Możesz sprawdzić, jaki był błąd, dzwoniąc pod numer mysql_error(), ale powinieneś był już wykryć błąd, zanim zadzwoniłeś pod numer mysql_query(), zanim dojdziesz do momentu, w którym dowiesz się, na ile wpływało to na liczbę wierszy.

Skoro pytasz o funkcję store_result, pozwól mi również odpowiedzieć na tę część pytania:

moduł PHP MySQL nie może mieć store_result funkcję, ale nowszy moduł MySQLi robi. Patrz: http://php.net/manual/en/mysqli.store-result.php

Zaleca się, aby zrezygnować z funkcji mysql_xxx z odpowiednimi funkcjami mysqli_xxx, więc byłaby to idealna okazja, aby to zrobić.

Nie musisz ulepszać swojej wersji PHP, ponieważ moduł MySQLi został wprowadzony w PHP 5.0. Sugerowałbym jednak rozważenie ulepszenia - jeśli używasz PHP 5.1, używasz wersji, która jest już nieobsługiwana przez ponad pięć lat.

Powiązane problemy