Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> SQL i apostrofy
-Gość_Adam-
post 20.04.2006, 21:00:42
Post #1





Goście







Wysylajac zapytanie do bazy danych standardowo piszemy ciagni znakow miedzy ' ' lub " " a w przypadku liczb pomijamy te apostrofy i cudzyslowy. Moje pytanie brzmi, dlaczego w taki wypadku pisac np tak:

  1. INSERT
  2. INTO tabela
  3. (kolumna1, kolumna2) VALUES (345, 'string')
skoro mozna to rowniez dobrze zapisac w taki sposob:
  1. INSERT
  2. INTO tabela
  3. (kolumna1, kolumna2) VALUES ('345', 'string')


Jaka jest roznica w tych sposobach i ktory jest lepszy? Pytam bo pisze klase do obslugi bazy danych i zastanawiam sie czy warto rozpoznawac i dodawac apostrofy tylko do stringow czy pojsc na latwizne i wstawiac je do kazdej wartosci.
Go to the top of the page
+Quote Post
devnul
post 20.04.2006, 21:11:36
Post #2





Grupa: Zarejestrowani
Postów: 1 470
Pomógł: 75
Dołączył: 21.09.2005
Skąd: że znowu

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


apostrofy ograniczają ciąg znaków - w wypadku liczb nie ma to znaczenia, bo są zapisywane jednym ciągiem bez odstepów.

Co do szybkosci to parsowanie zapytania odbywa się w taki sam sposób i IMO nie szybsze powinno być nawet z apostrofami/cudzysłowiu, bo wtedy parser nie sprawdza kolejnych znaków pod róznym kątem tylko czeka na zamknięcie apostrofa/cudzysłowiu


--------------------
Profesjonaliści są przewidywalni...
strzeż się amatorów...
FL4SHB4CK - imprezy, galerie, lokale
Go to the top of the page
+Quote Post
matrach
post 21.04.2006, 15:30:24
Post #3





Grupa: Zarejestrowani
Postów: 92
Pomógł: 0
Dołączył: 17.04.2006

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


345 - int (liczba)
'345' - string(ciąg)

Jeśli mysql dostanie stringa, a pole jest typu int próbuje go rzutować na liczbę, jeśli się nie powiedzie pole przyjmie wartość 0 (albo podane jako default).


Aby sprawdzić typ zmiennej użyj funkcji gettype()

Ten post edytował matrach 21.04.2006, 22:58:06
Go to the top of the page
+Quote Post
slash12345
post 21.04.2006, 19:12:02
Post #4





Grupa: Zarejestrowani
Postów: 70
Pomógł: 0
Dołączył: 21.04.2006

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


W skryptach dynamicznie wstawiających dynamicznie dane do zapytań, lepiej z powodów bezpieczeństwa używać apostrofów nawet w liczbach (inna sytuacja zachodzi gdy chcemy użyć mySQL jako kalkulatora smile.gif ).
Wiem że to dość głupie, ale użytkownik mógłby podstawić ciąg tekstowy jako liczbę i np. użyć jednej z funkcji wbudowanych w mySQL, albo ostatecznie włamać się do systemu.
Zabezpieczajcie się ludzie!


--------------------
Kod
thewanderer@debian:~$ sudo apt-get dist-upgrade
Konieczne pobranie 666KB pakietów. Czy chcesz kontynuować? [T/n] nieeeeeeee
Go to the top of the page
+Quote Post
devnul
post 21.04.2006, 19:39:32
Post #5





Grupa: Zarejestrowani
Postów: 1 470
Pomógł: 75
Dołączył: 21.09.2005
Skąd: że znowu

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


@slash12345: Gość_Adam wyraźnie napisał że:
Cytat
Pytam bo pisze klase do obslugi bazy danych


więc Twoja uwaga jest nie dokońca zasadna, bo przecierz można to rozwiązać poza klasą do obsługi mysql, zresztą tak czy inaczej apostrofy wcale nie uchronią przed dostepem do bazy przez nieautoryzowane osoby


--------------------
Profesjonaliści są przewidywalni...
strzeż się amatorów...
FL4SHB4CK - imprezy, galerie, lokale
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: 18.05.2025 - 11:57