Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php][MYSQL]wątpliwości z auto_increment,, LAST_INSERT_ID(), itp...
missile
post
Post #1





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 12.11.2005
Skąd: hen hen

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


Witam.

Pracuje aktualnie nad zwiększaniem wartości pola auto_increment/primary key o 1.
Wiem, istnieje kilka funkcji php oraz mysql np: mysql_insert_id() lub LAST_INSERT_ID(), jednak zwracają one wartość ostatniego polecenia INSERT. A co jeśli to polecenie jest pierwszym poleceniem w skrypcie i nie ma z czego ściągnąć wartości? Ja, korzystają z informacji znalezionych na tym forum stworzyłem coś takiego:

  1. <?php
  2.  
  3. include('_forum/_connection.php');
  4.  
  5.  $sql_query = "SELECT MAX(post_id) FROM posts ";
  6.  
  7.  $sql_result = mysql_query($sql_query, $conn)
  8. or die(mysql_error() . '<br /><br />Błąd pobierania najwiekszej wartości pola post_id!' . $sql_query);
  9.  
  10. while ($sql_row = mysql_fetch_array($sql_result, MYSQL_NUM)) {
  11. $sql_row[0]++;
  12. $NextPostId = $sql_row[0];
  13.  }
  14.  
  15.  $AddDate = date('Y-m-d H:i:s');
  16.  
  17. $sql_query = "INSERT INTO posts 
  18. (post_id,
  19. post_author_id)
  20. VALUES
  21. ('" . $NextPostId . "',
  22. '" . $_SESSION['UserId'] . "')";
  23.  
  24.  mysql_query($sql_query, $conn);
  25.  
  26. ?>


...skrypt działa, jednak istnieje możliwość, że w czasie pomiędzy wykonaniem polecenia SELECT i INSERT zostanie zmieniona wartość pola post_id. W takim wypadku mysql zgłosi błąd. Jeśli ma ktoś jakiś ciekawy pomysł, przedewszystkim prostszy chętnie wysłucham...

Pozdrawiam

Ten post edytował missile 21.03.2006, 10:13:57
Go to the top of the page
+Quote Post
FanFataL
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 13
Pomógł: 0
Dołączył: 6.09.2005
Skąd: Kraków / Katowice / Bydgoszcz

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


Pole auto_increment zostało właśnie po to stworzon żeby sie o takie rzeczy nie martwić:
  1. <?php
  2. // ...
  3. $sql_query = "INSERT INTO posts 
  4. (post_author_id)
  5. VALUES
  6. ('" . $_SESSION['UserId'] . "')";
  7. // ...
  8. ?>


Pozdrawiam (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
...
Go to the top of the page
+Quote Post
Zbłąkany
post
Post #3


Administrator serwera


Grupa: Developerzy
Postów: 521
Pomógł: 13
Dołączył: 2.04.2004
Skąd: 52°24' N 16°56' E

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


A jeśli koniecznie chcesz swoim sposobem inkrementować, to możesz użyć blokowania tabel (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
missile
post
Post #4





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 12.11.2005
Skąd: hen hen

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


Wiem, znam obydwa sposoby, o tym pierwszym co prawda zapomniałem (choć to podstawy) jednak problem wynikał z tego iż chcę wstawić do pola post_topic_id takiej samej wartości jaką przybrało pole post_id(auto_increment). Zależy mi na jak największym zoptymalizowaniu skryptu. Myślałem nad blokowaniem tablic, jednak dochodzą wtedy dwa dodatkowe zapytania do bazy. Najlepszym wyjściem będzie chyba jednak korzystanie z opcji auto_increment w bazie oraz bezpośrednio po poleceniu INSERT skorzystanie z funkcji mysql_insert_id() i wykonania zapytania wstawiającego wartość z ostatniego zapytania INSERT...
Go to the top of the page
+Quote Post
bendi
post
Post #5





Grupa: Zarejestrowani
Postów: 401
Pomógł: 5
Dołączył: 14.09.2003
Skąd: Wrocław

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


Type=InnoDB -> transactions
Go to the top of the page
+Quote Post

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: 25.08.2025 - 07:50