logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[MYSQL] [PHP5] - Inkrementacja zmiennej nie działa

MD1983 28 Sie 2012 17:01 2142 8
REKLAMA
  • #1 11255295
    MD1983
    Poziom 9  
    Posty: 33
    Pomógł: 1
    Witam.


    Mam w kodzie pliku funkcja.php taką funkcję, która robi za inkrementację id w każdym zapytaniu:
    Kod: PHP
    Zaloguj się, aby zobaczyć kod


    Chcę dodać wpis do bazy danych w dodajtd.php. Fragment kodu:


    Kod: PHP
    Zaloguj się, aby zobaczyć kod


    no i nie działa. Każde zapytanie INSERT ma id 1.

    Proszę o pomoc, bo nie mam już sił.

    PS mam PHP 5.3.3.7
  • REKLAMA
  • Pomocny post
    #2 11255335
    szwagros
    Poziom 33  
    Posty: 1844
    Pomógł: 232
    Ocena: 271
    Taki sposób ustalania bieżącego ID to bardzo zły pomysł. Użyj wewnętrznych funkcji MySQL, dodając opcję 'auto_increment' do definicji kolumny zawierającej ID.
  • REKLAMA
  • #3 11255377
    MD1983
    Poziom 9  
    Posty: 33
    Pomógł: 1
    szwagros napisał:
    Taki sposób ustalania bieżącego ID to bardzo zły pomysł. Użyj wewnętrznych funkcji MySQL, dodając opcję 'auto_increment' do definicji kolumny zawierającej ID.

    Mógłbyś podać przykład? nie jestem jeszcze tak obeznany.

    No ja rozumiem, to zły pomysł.
    Ale to nie mój kod, ma prawie 6 lat i łącznie ponad 54MB więc nie miałbym sił tego zmieniać

    Choć dobrze byłoby naprawić ten problem, i również poznać sposób o którym piszesz.

    Pozdrawiam!
  • REKLAMA
  • Pomocny post
    #4 11255402
    Dżyszla
    Poziom 42  
    Posty: 7077
    Pomógł: 1095
    Ocena: 226
    Czy używasz jakiegoś narzędzia administracji bazą danych? Jesli tak, to z pewnością znajdziesz tam opcję auto_increment - tak dodatkowo oznacza się kolumny, których id ma być zwiększany przy każdym dodaniu.
  • REKLAMA
  • #5 11255464
    MD1983
    Poziom 9  
    Posty: 33
    Pomógł: 1
    Tak zrobilem i nadal nie działa. W trybie debug sprawdziłem że ciagle robi identyczne zapytanie:

    INSERT INTO chars (id,jezyk,jezyk,nazwa,opis,plec,swr,fff,sp_more,last,xxx2,yyy1,status) VALUES (1,1,1,'nazwa','opis',plec,'0',numer,'xx',yy,0,0," . _YTT_DO . ")");
  • Pomocny post
    #6 11255553
    szwagros
    Poziom 33  
    Posty: 1844
    Pomógł: 232
    Ocena: 271
    MD1983 napisał:
    Tak zrobilem i nadal nie działa. W trybie debug sprawdziłem że ciagle robi identyczne zapytanie:

    INSERT INTO chars (id,jezyk,jezyk,nazwa,opis,plec,swr,fff,sp_more,last,xxx2,yyy1,status) VALUES (1,1,1,'nazwa','opis',plec,'0',numer,'xx',yy,0,0," . _YTT_DO . ")");

    Źle. Powinno być coś takiego:
    Kod: SQL
    Zaloguj się, aby zobaczyć kod

    czyli ID wogóle nie podajesz. Wstawione id możesz otrzymać zapytaniem:
    Kod: SQL
    Zaloguj się, aby zobaczyć kod

    'Last' jest chyba słowem kluczowym SQL - apostrofy.
    No i nie wiem o chodziło z podwójnie podaną kolumną 'jezyk'.
  • #7 11258386
    MD1983
    Poziom 9  
    Posty: 33
    Pomógł: 1
    Dzięki!

    A co jeśli. po INSERT INTO w dalszej czesci kodu mam zapytanie typu UPDATE SET WHERE? Jak odwołać się do tego ID? tak samo?
  • #8 11258397
    szwagros
    Poziom 33  
    Posty: 1844
    Pomógł: 232
    Ocena: 271
    Przeczytaj _ze zrozumieniem_ mój wcześniejszy post - tam jest odpowiedź.
  • #9 11258420
    MD1983
    Poziom 9  
    Posty: 33
    Pomógł: 1
    Ach, nie zauważyłem :)

    Dziękuję!

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik ma problem z inkrementacją ID w bazie danych MySQL w kodzie PHP. Otrzymuje sugestie, aby zamiast ręcznej inkrementacji użyć opcji 'auto_increment' w definicji kolumny ID. Po zastosowaniu tej opcji użytkownik nadal napotyka problemy, ponieważ zapytanie INSERT wstawia identyczne wartości. Ostatecznie, doradzono mu, aby nie podawał ID w zapytaniu INSERT, a zamiast tego użył funkcji `last_insert_id()` do uzyskania ostatnio wstawionego ID. Użytkownik pyta również o sposób odwołania się do ID w zapytaniach UPDATE po wstawieniu.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA