Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] Pole autoincrement
Forum PHP.pl > Forum > Przedszkole
cornholio666
Witam,

przykładowa tabela:

  1. id | imie
  2. ----------
  3. 1 | x
  4. 2 | y
  5. 3 | z


id - autoincrement

  1. SELECT id FROM tabela WHERE id = 0


Wykonuje takie zapytanie i skrypt nie zgłasza błędu, za to zwraca 1. Dlaczego ?
Earth
  1. SELECT imie FROM tabela WHERE id = 0


//Sorry nie doczytałem, myślałem że chodzi o to że zwraca numer id, a nie imię sciana.gif
Cienki1980
A sprawdzasz zapytanie z poziomu bazy czy php questionmark.gif

Może kwestia leży w kodzie i zwraca Ci true co jest interpretowane przez php jako 1.

Ja wykonując takie zapytanie z poziomu phpmyadmina dostaje
Cytat
MySQL zwrócił pusty wynik (zero rekordów).
cornholio666
Sprawdzam z poziomu php.


  1. <?php
  2. $result = mysql_query($query_string); 
  3. echo $result;
  4. ?>


W wyniku dostaje 1

Może to ma jakies znaczenie ze tabela jest typu INNODB?
Cienki1980
To teraz zaglądamy do manuala i czytamy co zwraca funkcja mysql_query

I wszystko powinno być jasne. biggrin.gif
cornholio666
Cytat
mysql_query() zwraca identyfikator wyniku (lub FALSE w przypadku niepowodzenia)


1. Czyli zwrociło mi indentyfikator 1, co to znaczy?
2. Dlaczego nie wywala błędu skoro wiadomo że id nie może byc 0 ?
Cienki1980
Ad1. Identyfikator połączenia to identyfikator połączenia .... nawet nie wiem jak to wytłumaczyć .... numer linii na autobusie/tramwaju ... patrząc na niego wiesz gdzie dojedziesz ... podobnie potraktuj identyfikator połączenia

Ad2. Zapytanie sprawdza warunek, nie znajduje żadnych rezultatów więc zwraca pusty zestaw ... tak samo jakbyś napisał w pytaniu where id=99999 ... jak nie będziesz miał takiego rekordu to zwróci Ci pusty zestaw.
cornholio666
Identyfikator połączenia - wiem co to jest, nie wiedzialem ze to jest to samo co identyfikator wyniku.


Czyli najlepszym rozwizaniem bedzie dodatkowe zapytanie które sprawdzi czy takie ID istnieje ?
Cienki1980
Ale po co questionmark.gif

Przecież mysql_query w przypadku zapytania SELECT zwraca Ci identyfikator połączenia a nie wynik ....
wykonaj mysql_query a potem mysql_fetch_* żeby sprawdzić czy rekord istnieje.
reversend
albo
mysqli_num_rows($result) - funkcja zwraca liczbę wierszy więc w tym przypadku bedzie 0
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.