Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MySQL]mysql_insert_id mały klopot
acztery
post
Post #1





Grupa: Zarejestrowani
Postów: 945
Pomógł: 7
Dołączył: 15.03.2005
Skąd: katowice

Ostrzeżenie: (0%)
-----


witam mam taki klopot


  1. public function sqlSave($array,$table,$id='') {
  2. $set = '';
  3.  
  4. while( list($key, $val) = each($array['form'])) {
  5. $set .= '`'.$key.'`=\''. stripslashes($val) .'\', ';
  6. }
  7. $set = substr ($set,0, strlen($set) - 2 );
  8. if (empty($id)) { //insert
  9. mysql_query("INSERT INTO `$table` SET $set");
  10. $id_ = mysql_insert_id();
  11. }
  12. else { //update
  13. mysql_query("UPDATE `$table` SET $set WHERE id = '".$id."'");
  14. $id_ = $id;
  15.  
  16. }
  17.  
  18.  
  19. $cache = new other_cache();
  20. $cache->clearch();
  21. return $id_;
  22. }


i i ta metoda ma zwracac id rekordu dodanego albo edytowanego. (edytowany dziala)
ale mysql_insert_id(); nie dziala

chodzi o zmienną $id_

moze ktos wie o co chodzi
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Jjeśli już robisz strukturalnie, to wypadało by sprawdzić czy zapytanie z INSERT się wykonało i czy choć jeden rekord został dodany, zanim wywołasz mysql_insert_id (IMG:style_emoticons/default/wink.gif) Innymi słowy oprócz tego że to ma być int a nie varchar, myślę że bezpieczniejszym rozwiązaniem byłoby albo walnąć wszystko jako transakcję, albo jeśli nie jesteś aż tak obciążany:
  1. $insert = mysql_query("INSERT INTO `$table` SET $set");
  2. if( $insert AND mysql_affected_rows() > 0 ) {
  3. $id_ = mysql_insert_id();
  4. }
Bez tego może dojść do sytuacji, że będziesz próbował ustawić $id_ zarówno dla insert jak i update choć żaden z nich nie zwróci informacji iż zmiany/dodanie zaszły, bo mogło do nich nie dojść, czego powody mogą być różne: wyczerpał się limit dla autoincrement, nie doszło do zmian w rekordzie (update z danymi mimo poprawnego zapytania zwróci dla mysql_query prawdę, ale już 0 dla affected_rows ) lub podobne atrakcje.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 10.10.2025 - 16:24