Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> PDO::lastInsertId - jak pobrać przy bindowaniu?
Kwpolska
post 29.12.2009, 14:09:57
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 26.09.2009

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


Chcę stworzyć superprosty CMS do użytku prywatnego jako uzupełnienie bloga, i największy problem mam z dodawaniem w panelu administracyjnym. Wszystko inne jest OK, tylko z tym nieszczęsnym ID mam problem. Czy wie ktoś, co trzeba tu poprawić? W manualu nic nie znalazłem, a z podpowiedzi z ##php na freenode nic nie wiem teraz (namącili).
  1. try
  2. {
  3. $pdo = new PDO('mysql:host=localhost;dbname=a7967401_wp;port=3306', 'a7967401_wp', '/* Haslo wyciete */');
  4. $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  5.  
  6. $stmt = $pdo -> prepare('INSERT INTO `kwportal_entries` (`id`, `title`, `contents`) VALUES(
  7. :id,
  8. :title,
  9. :contents)');
  10.  
  11. $stmt -> bindValue(':id', /* questionmark.gif */, PDO::PARAM_INT);
  12. $stmt -> bindValue(':title', $_POST['title'], PDO::PARAM_STR);
  13. $stmt -> bindValue(':contents', $_POST['cnt'], PDO::PARAM_STR);
  14.  
  15. $ilosc = $stmt -> execute();
  16.  
  17. if($ilosc > 0)
  18. {
  19. echo 'Dodano.';
  20. }
  21. else
  22. {
  23. echo 'BŁĄD!';
  24. }
  25.  
  26. }
  27. catch(PDOException $e)
  28. {
  29. echo 'Wystąpił błąd biblioteki PDO: ' . $e->getMessage();
  30. }


Ten post edytował Kwpolska 29.12.2009, 14:10:26
Go to the top of the page
+Quote Post
vokiel
post 29.12.2009, 14:33:08
Post #2





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


Po linii 15.
  1. $lastInsertId = $pdo>lastInsertId();


--------------------
Go to the top of the page
+Quote Post
Kwpolska
post 29.12.2009, 15:24:22
Post #3





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 26.09.2009

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


Zrobienie tak, jak poleca vokiel sprawi, że będę miał podany ID, ale już PO wysłaniu do bazy. Jak sprawić, żeby ID był pobrany tak, jak na schemacie poniżej?
Kod
     +-------------------+
     | pobranie id       |
     | (w dowolny        |
     | sposób)           |
     +-------------------+
               |
              \|/
     +-------------------+
     | wysyłanie         |
     | danych z $id++    |
     +-------------------+
Go to the top of the page
+Quote Post
wry
post 29.12.2009, 15:27:19
Post #4





Grupa: Zarejestrowani
Postów: 32
Pomógł: 3
Dołączył: 9.06.2007

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


domyslam sie ze pole id to klucz glowny i do tego autoincrementowany (jesli nie to zrob tak zeby byl) wiec mozesz smialo usunac z zapytnia id przez co nie bedziesz musial bindowac :id z zadna wartoscia silnik bazy danych sam sie zatroszczy o to zeby wypelnic ta krotke


--------------------
Go to the top of the page
+Quote Post
darko
post 29.12.2009, 16:34:12
Post #5





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


  1. // najpierw
  2. $result = $pdo->query("select last_insert_id()");
  3. $temp = $result->fetch(PDO::FETCH_NUM);
  4. $last_id = $temp[0];
  5. // później
  6. $stmt -> bindValue(':id', ++$last_id, PDO::PARAM_INT);

Poza tym jak wspomniano wyżej wartości autoinkrementowanych nie trzeba wstawiać samodzielnie, albo wystarczy podać "NULL" ("łańcuch znaków, nie typ).

Ten post edytował darko 29.12.2009, 16:50:41


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
vokiel
post 29.12.2009, 17:26:06
Post #6





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


Kolumna ID w bazie powinna być typu int, z autoincrement. Wtedy nie potrzebujesz pobierać największego istniejącego id, inkrementować go, i takim dodawać do bazy. W taki sposób masz 1 zamiast 2 zapytań.




--------------------
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 14:53