Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MYSQL] Funkcja maxid działa niepoprawnie
thomson89
post
Post #1





Grupa: Zarejestrowani
Postów: 1 178
Pomógł: 51
Dołączył: 7.01.2009
Skąd: Gdańsk

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


Witam!
Natchniony, szybko napisałem sobie funkcję, która sprawdza (bynajmniej powinna) sprawdzić jakie jest największe id. Po kilku poprawkach parse errorów zobaczyłem ze funkcja działa. Niestety: podaje id o 2 większe niz jest maksymalne i nie wiem dlaczego. Np. w tabeli mamy 7 rekordów, a wd. funkcji jest ich 9. Na szczęście po kilku próbach zobaczyłem że jest to regularne. Dodałem id-2 i funkcja działa poprawnie.

Po kilku męczących chwilach doszedłem do wniosku ze nie wiem czym jest to spowodowane. Dlatego, proszę o pomoc:

  1. <?php
  2. function maxid($polaczenie, $serwer, $tabela, $nazwa = "id"){
  3.        
  4.        if($polaczenie == 'new'){
  5.            
  6.            //jak mamy otowrzyc nowe polaczenie, otwieramy je
  7.            $polaczenie = lacz($serwer);    
  8.        
  9.        }
  10.        else {
  11.            
  12.            //jak polaczenie bylo, sprawdzamy jego aktywnosc
  13.            $polaczenie = mysql_ping($polaczenie);
  14.            if(!$polaczenie)
  15.                $polaczenie = lacz($serwer);      
  16.            
  17.        }
  18.        
  19.        $numer_id = 1;
  20.        $zapytanie = "SELECT * FROM ".$tabela." WHERE ".$nazwa." = ".$numer_id;
  21.        $wynik = mysql_query($zapytanie);
  22.        $ilosc_wierszy = mysql_num_rows($wynik);
  23.        if($ilosc_wierszy < 1){
  24.            
  25.            $id = $numer_id;
  26.            return $id;
  27.        
  28.        }
  29.        else {
  30.        
  31.        
  32.            //glowne sprawdzenie maksymalnego id
  33.            while($ilosc_wierszy >= 1){
  34.                
  35.                $zapytanie = "SELECT * FROM ".$tabela." WHERE ".$nazwa." = ".$numer_id;
  36.                $wynik = mysql_query($zapytanie);
  37.                $ilosc_wierszy = mysql_num_rows($wynik);
  38.                $numer_id++;
  39.                
  40.            }
  41.            
  42.            $id = $numer_id-2;
  43.            return $id;
  44.        }
  45.        
  46.        
  47.        rozlacz($polaczenie);
  48. }
  49. ?>


Funckja korzysta z moich funkcji lacz() i rozlacz(). Lacz() ma duzo parametrów opcjonalnych, a tutaj wykorzystuję tylko zmienną do laczenia sie z odpowiednim serwerem. rozlacz() to po prostu mysql_close(). Na sam koniec przed return dałem -2.

Pozdrawiam!

Ten post edytował thomson89 22.03.2009, 15:43:42
Go to the top of the page
+Quote Post
blooregard
post
Post #2


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




Wszystko możesz załatwić jednym zapytaniem SQL:
  1. SELECT MAX(id) FORM tabela WHERE warunki;
Go to the top of the page
+Quote Post
thomson89
post
Post #3





Grupa: Zarejestrowani
Postów: 1 178
Pomógł: 51
Dołączył: 7.01.2009
Skąd: Gdańsk

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


No, ale to co się nauczyłeś przy pisaniu skryptów, wpoiłeś ipt. to dobrze.

Ale się zdziwiłem że to tak można załatwić: no a mój problem?
Go to the top of the page
+Quote Post
blooregard
post
Post #4


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




Cytat
No, ale to co się nauczyłeś przy pisaniu skryptów, wpoiłeś ipt. to dobrze.

Tzn. JA się nauczyłem, czy Ty? (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Cytat
Ale się zdziwiłem że to tak można załatwić: no a mój problem?

No widzisz, a Twój problem? Słaba znajomość języka SQL (SQL to nie tylko SELECT, INSERT, UPDATE, DELETE, to także kupa różnych przydatnych f-cji, między innymi MAX(), do tego transakcje, triggery, procedury składowane, pozdapytania i ich wykorzystanie np. w klauzulach WHERE, złączenia itp. itd.)
Poucz się trochę SQL-a, a wiele problemów, takich jak ten powyżej, rozwiążesz już na poziomie zapytania do bazy, bez konieczności pisania zbędnych funkcji.
Na początek np. to przejrzyj: http://dev.mysql.com/doc/refman/5.1/en/
Go to the top of the page
+Quote Post
thomson89
post
Post #5





Grupa: Zarejestrowani
Postów: 1 178
Pomógł: 51
Dołączył: 7.01.2009
Skąd: Gdańsk

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


No dobra. Dzięki.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 15.09.2025 - 18:15