Witam,

Szukam i szukam po sieci jakiegoś dobrego przykładu z nextId() i nie moge nic znaleźć.

Znalazłem to:
Kod
<?php
...
// Get an ID (if the sequence doesn't exist, it will be created)
$id = $db->nextID('mySequence');

// Use the ID in your INSERT query
$res = $db->query("INSERT INTO myTable (id,text) VALUES ($id,'foo')");
...
?>


Czym są parametry przekazywane do nextId()?
Bardzo proszę o wyjaśnienie tej metody najlepiej z jakimś prostym przykładem.

Coś znalazłem może przyda się innym.

Mianowicie w momencie wywołania wywołania metody w bazie została utworzona tabela o nazwie podanej w parametrze + "_seq" skladajaca sie z jednej kolumny id.
Przy każdym uzyciu metody wartosc w tabeli incrementuje sie.
Nadal nie rozumiem zwiazku tej funkcji z istnieniem tabeli np produkty z której chce wyciagnac nastepne wolne id z pola id ktore ma atrybut auto_increment.
Po co jest tworzona nowa tabela? :|

Zalezy mi na tej funkcji poniewaz chce stworzyc modul ktory w momencie dodania produktu do bazy po wypelnieniu formularza pobierze id nowododanego produktu abym mogl dodac do niego zdjecie o nazwie "$id_produtku".'_'.$nazwa_produktu.

Jeśli ktoś wie coś więcej proszę o uzupełnienie.
Pozdrawiam

Doszedłem co i jak, więc postanowiłem podzielić się odkryciem z innymi. Mam nadzieję że komuś przydadzą się poniższe informacje. smile.gif
Od razu się ubezpieczę - nie jestem pro więc wybaczcie błędy logiczne oraz nazewnicze. I proszę o poprawę ewentualnych baboli smile.gif

Funkcja a właściwie metoda nextId() znajdująca się w klasach odpowiedzialnych za łączenie się z bazami danych repozytorium PEAR jest odpowiedzialna za odczytanie wartości auto_increment z tabeli dla której chcemy dodać nowy rekord.
Hmm nie jest tak do końca, ponieważ wywołanie metody z argumentami nextId("nazwa_tabeli", true) najpierw utworzy tabelę w bazie danych o nazwie "nazwa_tabeli_seq" w której będzie tylko jedno pole o nazwie "id" i zwróci wartość tego pola. Kolejne wywołania metody będą incrementowały wartość w tabeli z końcówką _seq.

Pytania które nasunęły mi się podczas reaserch'a.
- Do czego to się przydaje?
- Mnie się to przydało do zbudowania sklepu w którym tworząc nowy produkt jednocześnie podaję niezbędne do utworzenia dane oraz plik zdjęcia danego produktu, któremu chcę nadać nazwę w formacie "ID_nazwa_produktu.[gif][jpg]etc. Muszę znać id produktu zanim go utworzę.

- Skąd się bierze _seq?
- Metoda jest metodą sekwencyjną smile.gif

- Po co dodatkowa tabela?
- Klasa DB jest uniwersalną klasą obsługującą wiele baz danych, więc potrzebny jest ujednolicony sposób odczytu danych o kolejnym id, nie ograniczając się do mysql_insert_id() dla MySQL'a, która zwraca ostatnio dodane id. Poza tym użycie w kodzie mysq_insert_id() dla MySQL'a automatycznie odrzuca sens pisania aplikacji z klasą DB.

- Co jeśli spytamy o następne id a polecenie INSERT nie wykona się?
- Tabela _seq incrementuje swoją wartość w polu id i faktyczny stan pola auto_increment w tabeli docelowej i tabeli _seq będą różne. Ale przecież to niczemu nie przeszkadza jeśli w bazie będą puste wartości dla auto_increment to samo dzieje się jeśli usuwamy rekord.

Pozdrawiam serdecznie