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')");
...
?>
...
// 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