MiSi3kK 16 Zgłoś post Napisano Sierpień 25, 2009 Cześć, od jakiegoś czasu mam dziwne problemy z MySQL. Zaczęło się od błędnego działania mysql_insert_id() w php. Przykładowo: wykonuję w php insert, a natychmiast po nim sprawdzam tą funkcją id. Prawdziwe id to 102, a funkcja zwraca np 146. Następnie spróbowałem z SELECT LAST_INSERT_ID() - zwraca wiele wyników, same zera. Co może powodować takie dziwne zachowanie mysql? Bo nie mam już pomysłu na obejście tego Udostępnij ten post Link to postu Udostępnij na innych stronach
Miłosz 2311 Zgłoś post Napisano Sierpień 25, 2009 a ID jest autoincrement? chociaż nie wiem czy to coś zmienia. Może po tym insercie zrób coś w stylu select id from table order by id desc limit 1 - to by tak na około było Udostępnij ten post Link to postu Udostępnij na innych stronach
MiSi3kK 16 Zgłoś post Napisano Sierpień 25, 2009 autoincrement jest Chyba testowo przekompiluję mysql, bo pisanie wszędzie dziwnych zapytań tylko w celu pobrania ostatniego id mija się z celem EDIT: Dzięki za pomysł, do momentu rozwiązania problemu mogę go stosować Udostępnij ten post Link to postu Udostępnij na innych stronach
kafi 2425 Zgłoś post Napisano Sierpień 25, 2009 Używając Last_Insert_ID musisz pamiętać, że po 1) to nie jesteś sam na serwerze bazodanowym, i serwer pomiędzy twoimi dwoma zapytaniami może wykonać jakieś inne. Dlatego jeśli już coś takiego chcesz otrzymywać, to musisz robić to w jednym zapytaniu: $sql_query = 'INSERT (...); SELECT LAST_INSERT_ID();'; A druga sprawa, to zwróci ci to ID _pierwszego_ z dodanych wielu rekordów (czyli jak dodasz więcej niż jeden, to tego PIERWSZEGO dodanego ) Udostępnij ten post Link to postu Udostępnij na innych stronach
Wojciech Małota 0 Zgłoś post Napisano Sierpień 25, 2009 Używając Last_Insert_ID musisz pamiętać, że po 1) to nie jesteś sam na serwerze bazodanowym, i serwer pomiędzy twoimi dwoma zapytaniami może wykonać jakieś inne.Dlatego jeśli już coś takiego chcesz otrzymywać, to musisz robić to w jednym zapytaniu: $sql_query = 'INSERT (...); SELECT LAST_INSERT_ID();'; Czysta bzdura. Cytat z dokumentacji MySQL: "The ID that was generated is maintained in the server on a per-connection basis. This means that the value returned by the function to a given client is the first AUTO_INCREMENT value generated for most recent statement affecting an AUTO_INCREMENT column by that client. This value cannot be affected by other clients, even if they generate AUTO_INCREMENT values of their own. This behavior ensures that each client can retrieve its own ID without concern for the activity of other clients, and without the need for locks or transactions. " Źródło: http://dev.mysql.com/doc/refman/5.0/en/inf..._last-insert-id Udostępnij ten post Link to postu Udostępnij na innych stronach
kafi 2425 Zgłoś post Napisano Sierpień 25, 2009 Czysta bzdura. Nie do końca - bo ciekawie to się przy pconnect'ach zachowuje. Udostępnij ten post Link to postu Udostępnij na innych stronach
MiSi3kK 16 Zgłoś post Napisano Sierpień 25, 2009 W takiej sytuacji mogę za to spokojnie wykonać SELECT last_insert_id() FROM tabela i nie powinno być problemu. Zresztą to i tak nie tłumaczy błędnego działania mysql_insert_id(). Teoretycznie może to być problem z pconnect, ale nie powinno się to wtedy tak często powtarzać. Udostępnij ten post Link to postu Udostępnij na innych stronach