Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> SELECT i apostrofy
johnson
post 17.02.2005, 08:37:26
Post #1





Grupa: Zarejestrowani
Postów: 90
Pomógł: 2
Dołączył: 3.12.2004

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


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 14)
Vertical
post 17.02.2005, 15:03:40
Post #2





Grupa: Zarejestrowani
Postów: 848
Pomógł: 0
Dołączył: 7.07.2004
Skąd: Wrocław

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


MySQL interpretuje inaczej zmienną w apostrofach i inaczej bez apostrofów nawet, jeśli zmienną jest INT
Go to the top of the page
+Quote Post
johnson
post 17.02.2005, 15:10:44
Post #3





Grupa: Zarejestrowani
Postów: 90
Pomógł: 2
Dołączył: 3.12.2004

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


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?
Go to the top of the page
+Quote Post
Vertical
post 17.02.2005, 15:19:15
Post #4





Grupa: Zarejestrowani
Postów: 848
Pomógł: 0
Dołączył: 7.07.2004
Skąd: Wrocław

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


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
Go to the top of the page
+Quote Post
Yarecki
post 17.02.2005, 23:39:44
Post #5





Grupa: Zarejestrowani
Postów: 166
Pomógł: 0
Dołączył: 1.04.2004
Skąd: Gdynia

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


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 ?


--------------------
Nigdy nie kłóć się z głupim, ludzie mogą nie dostrzec różnicy.
Go to the top of the page
+Quote Post
crash
post 17.02.2005, 23:42:35
Post #6





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

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


Yarecki: chyba nie zrozumiałeś wypowiedzi Verticala. On właśnie napisał, że liczb nie należy ujmować w cudzysłowia w zapytaniach.


--------------------
Go to the top of the page
+Quote Post
Yarecki
post 18.02.2005, 00:08:18
Post #7





Grupa: Zarejestrowani
Postów: 166
Pomógł: 0
Dołączył: 1.04.2004
Skąd: Gdynia

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


@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/...).

Ten post edytował Yarecki 18.02.2005, 00:13:32


--------------------
Nigdy nie kłóć się z głupim, ludzie mogą nie dostrzec różnicy.
Go to the top of the page
+Quote Post
Vertical
post 18.02.2005, 14:32:28
Post #8





Grupa: Zarejestrowani
Postów: 848
Pomógł: 0
Dołączył: 7.07.2004
Skąd: Wrocław

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


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

Ten post edytował Vertical 18.02.2005, 14:33:37
Go to the top of the page
+Quote Post
johnson
post 18.02.2005, 15:47:45
Post #9





Grupa: Zarejestrowani
Postów: 90
Pomógł: 2
Dołączył: 3.12.2004

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


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.
Go to the top of the page
+Quote Post
Yarecki
post 18.02.2005, 18:20:30
Post #10





Grupa: Zarejestrowani
Postów: 166
Pomógł: 0
Dołączył: 1.04.2004
Skąd: Gdynia

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


@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 "".


--------------------
Nigdy nie kłóć się z głupim, ludzie mogą nie dostrzec różnicy.
Go to the top of the page
+Quote Post
crash
post 18.02.2005, 20:18:11
Post #11





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

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


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.


--------------------
Go to the top of the page
+Quote Post
popbart
post 18.02.2005, 22:00:57
Post #12





Grupa: Zarejestrowani
Postów: 255
Pomógł: 0
Dołączył: 22.04.2004
Skąd: Żoliborz

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


Vertical już nie pierwszy raz myli ludzi.


--------------------
Visual Basic - kto by pomyślał :)
Go to the top of the page
+Quote Post
Kocurro
post 18.02.2005, 22:20:52
Post #13





Grupa: Zarejestrowani
Postów: 461
Pomógł: 32
Dołączył: 17.09.2003
Skąd: Łódź

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


Liczby w znaczeniu INT nie powinny być ujmowane w cudzysłowy, liczby jako ciągi powinny - i tyle.
Go to the top of the page
+Quote Post
marmomm
post 22.02.2005, 10:29:07
Post #14





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 25.06.2004

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


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

Ten post edytował marmomm 22.02.2005, 10:34:35
Go to the top of the page
+Quote Post
Yarecki
post 22.02.2005, 13:27:08
Post #15





Grupa: Zarejestrowani
Postów: 166
Pomógł: 0
Dołączył: 1.04.2004
Skąd: Gdynia

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


Przed wstawieniem do bazy danych, użyj addslashes(), a po wyciągnięciu użyj stripshalshes().


--------------------
Nigdy nie kłóć się z głupim, ludzie mogą nie dostrzec różnicy.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 09:44