Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Poprawność bindowania PDO
Forum PHP.pl > Forum > PHP
Darekxp
Witam!

Czy taki sposób bindowania jest poprawny/bezpieczny?

  1. <?php
  2. $thisPage = 'offer';
  3.  
  4. $categoryId = filter(isset($_GET['categoryId']));
  5. $itemId = filter(isset($_GET['itemId']));
  6.  
  7. ## DISPLAY PAGE ##
  8.  
  9. if($categoryId && $itemId)
  10. {
  11.  
  12. ## DATA ##
  13.  
  14.  
  15. $sql = $pdo->prepare('SELECT id, title_'.$_lang.', text_'.$_lang.', category, promotions, photo FROM '.$thisPage.' WHERE id=:id AND category=:category AND status="1" ');
  16. $sql->bindParam(':id', $itemId, PDO::PARAM_INT);
  17. $sql->bindParam(':category', $categoryId, PDO::PARAM_INT);
  18. $sql->execute();
  19. $data = $sql->fetchAll();
  20. $sql->closeCursor();
  21.  
  22. $smarty->assign('data',$data);
  23.  
  24. ## DISPLAY TEMPLATE ##
  25.  
  26. $smarty->display('templates/public/'.$thisPage.'_item.tpl');
  27. }
  28. else
  29. {
  30. //dalszy kod
  31. }
nospor
Bindujesz dokładnie tak jak każą w manualu - wszystko ok. Czemu uważasz że może to byc niebezpieczne?
viking
Chyba że $_lang to jakiś $_REQUEST['lang'] wink.gif
nospor
No ale to już nie jest BINDOWANIE a autor wyraźnie się pyta o bindowanie wink.gif
Darekxp
Od ok tygodnia uczę się OOP i jak mam jakieś wątpliwości to wole zapytać na forum, niż robić błędy.
Zmienna $_lang = filter($_GET['lang']);
zegarek84
zapytanie select nie powinno być zależne od parametru get|post - na jego podstawie możesz ustalić/posklejać zapytanie ale nie na żywca, tak nie może być, reszta bindowania poprawnie i możesz tam wsadzać bindując nawet parametry z get i post...
Darekxp
Czyli lepiej zrobić to np tak: ?

  1. <?php
  2.  
  3. if($_lang == 'en')
  4. {
  5. $sql = $pdo->prepare('SELECT id, title_en, text_en, category, promotions, photo FROM '.$thisPage.' WHERE id=:id AND category=:category AND status="1" ');
  6. }
  7. else
  8. {
  9. $sql = $pdo->prepare('SELECT id, title_pl, text_pl, category, promotions, photo FROM '.$thisPage.' WHERE id=:id AND category=:category AND status="1" ');
  10. }
  11.  
  12.  
zegarek84
tak, ale żeby kod był czytelniejszy to możesz określić sam $_lang na if'ach i potem go podpiąć, jeśli tych języków miałbyś masę, to mógłbyś sprawdzić, czy język z tego get'a znajduje się w tablicy, jeśli nie to jakiś defaultowy (w ten sposób także się ochronisz przed niechcianymi wartościami)
  1. $_lang = 'pl';
  2. $temp = isset($_GET['lang'])?strtolower($_GET['lang']):'';
  3.  
  4. if($temp === 'en')
  5. $_lang = $temp;
  6. $sql = $pdo->prepare('SELECT id, title_'.$_lang.', text_'.$_lang.', category, promotions, photo FROM '.$thisPage.' WHERE id=:id AND category=:category AND status="1" ');

po prostu popracuj jeszcze trochę nad czytelnością oraz byś łatwo mógł modyfikować kod w jak najmniejszej liczbie miejsc...
Darekxp
Sprawdzanie języka mam zrobiony.
No ale chyba trochę odbiegamy od tematu, co chyba nie do końca jest wskazane ;p
Dzięki za pomoc:)


  1. $_lang = filter($_GET['lang']);
  2.  
  3. $_siteLang = array('pl','en');
  4.  
  5. if(!in_array($_lang,$_siteLang))
  6. {
  7. header('Location: /pl/');
  8. }
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.