Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: SQL i apostrofy
Forum PHP.pl > Forum > Przedszkole
Gość_Adam
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.
devnul
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
matrach
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()
slash12345
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!
devnul
@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
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.