Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: SELECT i apostrofy
Forum PHP.pl > Forum > Bazy danych > MySQL
johnson
Czy dla MySQL'a jest jakaś różnica między zapytaniami:

msql_query("select nazwa from tablica where id=$id");
msql_query("select nazwa from tablica where id='$id'");

Chodzi mi o apostrofy w drugim zapytaniu, id jest typu INT.
Czy ostatnio coś się zmieniło w tej kwestii? Nigdy nie miałem z tym
problemu, a teraz mysql źle odpowiada na niektóre zapytania sad.gif
Vertical
MySQL interpretuje inaczej zmienną w apostrofach i inaczej bez apostrofów nawet, jeśli zmienną jest INT
johnson
Cytat(Vertical @ 2005-02-17 14:03:40)
MySQL interpretuje inaczej zmienną w apostrofach i inaczej bez apostrofów nawet, jeśli zmienną jest INT

Czy mógłbyś rozwinąć myśl?
To, że interpretuje inaczej to się zgodzę, ale czy może dawać inne wyniki jeśli $id=3? Tzn. czy w jednym lub drugim przypadku może nie zwracać rekordu jeśli rekord o id=3 istnieje?
Vertical
Cytat
czy może dawać inne wyniki jeśli $id=3?

Jeśli $id=3 i nie jest wzięte w apostrofy przy wykonywaniu zapytania zwykle MySQL wysypuje błąd lub nic nie zwraca
Yarecki
Cytat(Vertical @ 2005-02-17 15:19:15)
Jeśli $id=3 i nie jest wzięte w apostrofy przy wykonywaniu zapytania zwykle MySQL wysypuje błąd lub nic nie zwraca

Pierwsze słysze. Według tego co mówisz wszystkie moje skrypty, które wyświetlają prawidłowy wynik, tak na prawdę nie działają ?

Jeśli faktycznie cyfry trzeba wstawiać w '' lub "", to prosiłbym o podanie linka do manuala mysql, gdzie to opisali.

Dla przykładu ten kawałek:
  1. <?php
  2.  
  3. $mixSql = 'DELETE FROM categories WHERE category_id = ' . $intId;
  4.  
  5. ?>

nie działa ?
crash
Yarecki: chyba nie zrozumiałeś wypowiedzi Verticala. On właśnie napisał, że liczb nie należy ujmować w cudzysłowia w zapytaniach.
Yarecki
@crashu mógłbym zacytować wypowiedź z innego wątku, ale nie o to chodzi.

BTW. Jeśli cyfra jest w '' lub "", to baza musi ją rzutować do odpowiedniego typu (int/float/...).
Vertical
Cytat
Pierwsze słysze.

Tak jest w moim przypadku (MySQL 4.0). Zresztą wystarczy poszukać na forum, bo było kilka przypadków, że ktoś liczby nie wpisał w '' i MySQL wysypywał błąd
johnson
Cytat(Vertical @ 2005-02-18 13:32:28)
Tak jest w moim przypadku (MySQL 4.0). Zresztą wystarczy poszukać na forum, bo było kilka przypadków, że ktoś liczby nie wpisał w '' i MySQL wysypywał błąd

Tylko, że w moim przypadku błąd, czy raczej brak wyników, występował właśnie jak używałem apostrofów. Tzn. mysql raz zwracał wyniki, a raz nie przy tych samych warunkach (może była to też przyczyna php, ale samo zapytanie i przekazywanie zmiennych do polecia sql raczej były proste).

Chciałem właśnie zrezygnować z apostrofów i w przypadku typu INT nie używać ich, ale skoro mówicie, że tak jest lepiej i nie wpływa to negatywnie na wykonywane zapytanie to chyba pozostane przy apostrofach.
Yarecki
@Vertical U mnie, a raczej u mojego kolegi, było na odwrót. Kiedy miał, apostrofy zapytanie raz działało, a raz nie. Dopiero po usunięciu, nie było dziwnych przerw, w działaniu skryptów.

Pod adresem: http://dev.mysql.com/doc/mysql/en/literals.html tylko strinki są ujmowane w '' lub "".
crash
No i tak powinno być (liczby w zapytaniach nie powinny być ujmowane w cudzysłowia), już się zacząłem gubić w wypowiedziach Verticala, albo od poczatku czegoś nie zrozumiałem.
popbart
Vertical już nie pierwszy raz myli ludzi.
Kocurro
Liczby w znaczeniu INT nie powinny być ujmowane w cudzysłowy, liczby jako ciągi powinny - i tyle.
marmomm
to poniekad podobny problem wiec prosze o pomoc:

mam cos takiego:
z forma na stronie dodaje nazwy utworow do bazy z punktami. Potem chce pokazywac najpopularniejsze utwory. Wyciagam wiec z bazy niepotwarzajace sie rekordy (distinct utwor) i wykonuje kolejne zapytanie sumujace punkty dla kazdego z tych rekordow (utworu).

Problem pojawil sie gdy w nazwie utworu wystapi ' np. don't
probowalem juz kilku opcji.. bez skutku...

myslalem ze to rozwiaze problem:
przed dodaniem do bazy robie htmlentities($utwor, ENT_QUOTES);
wtedy w bazie zamiast don't mam
  1. <?php
  2. don&#092;'t 
  3. ?>

wiec powinien wyciagnac ten ciag i policzyc ile razy wystepuje w bazie i ile ma punktow... ale nie dziala ...co dziwne zapytanie:
SELECT DISTINCT utwor ....
daje po wyswietlenie wartosc don\'t questionmark.gif?
czyli co automatycznie zdekodowal zmienna questionmark.gif?
i podliczenie nie wychodzi bo mowi ze nikt nie glosowal na don\'t tylko na
  1. <?php
  2. don&#092;'t
  3. ?>
...

co robienie nie tak ..pomozcie, please....

edit: wstawiam zapis w php zeby nie zmienilo posta smile.gif
Yarecki
Przed wstawieniem do bazy danych, użyj addslashes(), a po wyciągnięciu użyj stripshalshes().
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.