Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PDO::PARAM_INT problem
Forum PHP.pl > Forum > PHP
nexxx
Witam, mam takie zapytanie

  1. $profil = $_GET['profil'];
  2.  
  3. $fotka = $_GET['fotka'];
  4.  
  5.  
  6. if(strlen($profil) <= 15 && strlen($fotka) <=4){
  7.  
  8. $stmt = $pdo->prepare("SELECT * FROM profil WHERE id = :id");
  9. $stmt->bindParam(':id', $profil, PDO::PARAM_INT);
  10. $stmt->execute();
  11. $kod = $stmt->fetch();
  12.  
  13. }


i zauwazyłem, ze nie ma roznicy czy zmienie PARM_STR na INT. jak zmienna profil = "lol" to wypisze ja z bazy, a jak nazywa sie 222 to również wypisze. Co robię nie tak i jak zrobić żeby to filtrowanie zaczęło wypisywać mi tylko inty?
viking
Nie wiem czego oczekujesz ale jedyne co to robi, to konwertuje bool na long. Rzutuj to na int $profil = (int) $_GET['profil']; albo zrób poprawną walidację.
Pyton_000
Bidnowanie z tego co pamiętam powoduje że mysql robi castowanie na okreslony typ. Więc wpisując `lol` jako parametr dla INT spowoduje że MySQL zrobi CAST do wartości numerycznej. Ręki nie dam sobie uciąć za to.
nexxx
Dzieki. myslalem, ze to jest do filtrowania zmiennych. Czyli musze robić (int) $_GET['profil'].

A jak zrobic prawidłową walidacje? o co w ogole chodzi?
viking
Warto sobie dodać, ja zawsze zapominam.
https://github.com/php/php-src/blob/a7fe257...pdo_stmt.c#L305

https://prophp.pl/advice/show/25/jak_zabezp...ql_injection%3F
Akurat w tym wypadku rzutowanie wystarczy ale możesz sprawdzić np regexpem czy podana wartość to [1-9][0-9]*

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.