Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][MYSQL]wątpliwości z auto_increment,
Forum PHP.pl > Forum > PHP
missile
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
FanFataL
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 winksmiley.jpg
...
Zbłąkany
A jeśli koniecznie chcesz swoim sposobem inkrementować, to możesz użyć blokowania tabel smile.gif
missile
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...
bendi
Type=InnoDB -> transactions
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.