![]() |
![]() |
![]() ![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 8.02.2006 Ostrzeżenie: (0%) ![]() ![]() |
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. ![]() Od razu się ubezpieczę - nie jestem pro więc wybaczcie błędy logiczne oraz nazewnicze. I proszę o poprawę ewentualnych baboli ![]() 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ą ![]() - 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 Ten post edytował DrJOB 27.08.2006, 17:43:08 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 04:28 |