Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pola w bazie, jaki rozmiar
Forum PHP.pl > Forum > Bazy danych > MySQL
IceManSpy
Witam

Natchnęła mnie jedna myśl i chcę posłuchać waszych opinii, porad i doświadczeń. Robimy sobie tablę w której mamy przykładowe pola imię i nazwisko. Ustalamy np takie coś:
  1. imie varchar(20),nazwisko varchar(30)

Wszystko fajnie, mamy maksymalnie określoną wielkość. Ale jeśli chcemy zabezpieczyć się przed SQL injection dodając slashe, to musimy pomyśleć, że ktoś może mieć nazwisko z ' (O'Really) które ma 32 znaki (abstrahując - ale zawsze ktoś >> jakiś niedobry hakjer, może wpisać w pole 30 znaków ' <<). To co robić w taki przypadku? Deklarować np pole nazwisko varchar(60), ale ograniczać wpis przez 2 czyli do 30 znaków? Czy MySQL rezerwuje miejsce w pamięci dopiero jak wie, ile jest znaków w polu, czy z góry rezerwuje maksymalną ilość niezależnie od ilości wpisanych znaków?
flashdev
Cytat(IceManSpy @ 1.08.2010, 12:50:10 ) *
[...]
Czy MySQL rezerwuje miejsce w pamięci dopiero jak wie, ile jest znaków w polu, czy z góry rezerwuje maksymalną ilość niezależnie od ilości wpisanych znaków?


To zależy od ROW_FORMAT. Może przyjąć wartość DYNAMIC lub FIXED.
IceManSpy
Cytat(flashdev @ 1.08.2010, 13:28:26 ) *
To zależy od ROW_FORMAT. Może przyjąć wartość DYNAMIC lub FIXED.


Jak i gdzie to sprawdzić? No i dalsze pytanie, jakie rozmiary ustawiać?
flashdev
Cytat(IceManSpy @ 1.08.2010, 13:52:32 ) *
Jak i gdzie to sprawdzić? No i dalsze pytanie, jakie rozmiary ustawiać?


phpMyAdmin -> Operacje -> Opcje tabeli

Jak ustawiać to już zależy od konkretnego przypadku. Przy ustawieniu FIXED dostęp do danych będzie szybszy, ale przy DYNAMIC baza danych będzie zajmowała mniej miejsca na dysku.
IceManSpy
A jak z rozmiarem pola? Robić 2 razy większy niż chce czy jaki?
Mchl
Cytat(IceManSpy @ 1.08.2010, 12:50:10 ) *
Ale jeśli chcemy zabezpieczyć się przed SQL injection dodając slashe...


Przecież slashe nie są zapisywane w bazie. Chyba że slaszujesz podwójnie, ale to jest błąd.
IceManSpy
Faktycznie, nie zapisuje. W takim razie po co robić stripslashes przy odczycie?
Mchl
Po nic. Stripslashes trzeba zrobić przed zapisem, jeśli mamy włączone magic_quotes

Kod
if(get_magic_quotes_gpc()) {
  $var = stripslashes($_POST['var']);
}
$var = mysql_real_escape_string($var);
IceManSpy
Ale jeśli mamy włączone magic_quotes, to nie musimy dbać o addslashes'y i o SQL injection?
Mchl
Musimy, bo to g...niane zabezpieczenie i nie uwzględnia wielu możliwych ataków. Dlatego przez stripslashes() odkręcamy to co robi magic_quotes, a potem używamy funkcji dedykowanej do naszej bazy danych.

Poza tym w następnej wersji PHP magic quotes w ogóle już nie będzie.
http://wiki.php.net/rfc/magicquotes
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.