Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] PDO
Forum PHP.pl > Forum > Przedszkole
gawar
Witam, Czy jeżeli stosuję bibliotekę PDO do komunikacji z bazą danych i robie to za pomocą bloku try {}catch{} to czy należy jeszcze przed np. wyświetleniem dodanych danych sprawdzić np ifem czy dane się dodały? Czy jest to sprawdzanie bez sensu? i ten if jest zbędny?

  1. try
  2. {
  3. $dodaj = $sth->prepare('INSERT INTO t_dane
  4. SET
  5. imie_zm=:imie_zm,
  6. nazwisko_zm=:nazwisko_zm,
  7. id_miejsce=:id_miejsce,
  8. data_p_zm=NOW()');
  9.  
  10. $dodaj->bindValue(':imie_zm',$imie_zm,PDO::PARAM_STR);
  11. $dodaj->bindValue(':nazwisko_zm',$nazwisko_zm,PDO::PARAM_STR);
  12. $dodaj->bindValue(':id_miejsce',$id_miejsce,PDO::PARAM_INT);
  13. $dodaj->execute();
  14. if ($dodaj->rowCount() == 1)
  15. {
  16. $dodaj->closeCursor();
  17. header("Location: index.php?id=wyswietl_miejsce.php&id_miejsce=$id_miejsce");
  18. } else
  19. {
  20. echo 'Nieoczekiwany błąd';
  21. exit();
  22. }
  23. }
  24. catch (PDOException $e)
  25. {
  26. echo 'Error!: Wystąpił błąd podczas wstawiania rekordów'.$e->getMessage();
  27. die();
  28. }
  29.  

Z góry dziękuję za odpowiedź!
!*!
A co ma try, catch do sprawdzania danych? Zawsze sprawdzaj działanie kodu i tego czy wynik jest oczekiwany.
gawar
To tak jak kod jest podany powyżej to jest dobrze czy coś tam trzeba zmienić?Np ifa dać za catch?
!*!
Sprawdź pierw czym są wyjątki http://pl.wikibooks.org/wiki/PHP/Wyjątki oraz jak ich używać (po co Ci echo?)
Kod jest ok, poza tym że nigdzie nie widzę, abyś walidował dane które przesyłasz.
Crozin
Jeżeli skonfigurowałeś PDO by w przypadku błędu rzucało wyjątkiem, nie ma potrzeby sprawdzania czy PDOStatement::execute() wykonało się poprawnie. W przypadku błędu blok catch wychwyci go.
gawar
konfiguracja pdo
  1. $sth->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

dane sprawdzam w innym pliku np w taki sposób dla nazwiska:
  1. if (isset($_POST['nazwisko_zm']))
  2. {
  3. $dlugosc_nazwisko = strlen($_POST['nazwisko_zm']);
  4.  
  5. if ($dlugosc_nazwisko >= 2 && $dlugosc_nazwisko <= 60)
  6. {
  7. //ok
  8. } else
  9. {
  10. echo "Pole nazwisko ma minimalną ilość znaków - 2, maksymalną - 60<br />";
  11. exit();
  12. }
  13.  
  14. if (preg_match('/[^A-Za-z \'\-]/',$_POST['nazwisko_zm']))
  15. {
  16. echo"Pole nazwisko nie może zawierać znaków innych niż alfabetyczne i apostrofy";
  17. exit();
  18. } else
  19. {
  20. $nazwisko_zm=trim(ucwords($_POST['nazwisko_zm']));
  21. }
  22. if (!$nazwisko_zm)
  23. {
  24. echo "Brak nazwiska zmarłego<br />";
  25. }
  26. }
czy to jest dobrze?
to czyli cały kod może wyglądać tak?
  1. try
  2. {
  3. $dodaj = $sth->prepare('INSERT INTO t_dane
  4. SET
  5. imie_zm=:imie_zm,
  6. nazwisko_zm=:nazwisko_zm,
  7. id_miejsce=:id_miejsce,
  8. data_p_zm=NOW()');
  9.  
  10. $dodaj->bindValue(':imie_zm',$imie_zm,PDO::PARAM_STR);
  11. $dodaj->bindValue(':nazwisko_zm',$nazwisko_zm,PDO::PARAM_STR);
  12. $dodaj->bindValue(':id_miejsce',$id_miejsce,PDO::PARAM_INT);
  13. $dodaj->execute();
  14. $dodaj->closeCursor();
  15. header("Location: index.php?id=wyswietl_miejsce.php&id_miejsce=$id_miejsce");
  16. }
  17. catch (PDOException $e)
  18. {
  19. echo 'Error!: Wystąpił błąd podczas wstawiania rekordów'.$e->getMessage();
  20. die();
  21. }




spojrzy ktoś? Nie wiem czy dobre jest moje rozumowanie.
!*!
Bez sensu.

- długość znaków sprawdzaj przy pomocy mb_strlen, ponieważ zwraca poprawną jej ilość. Sprawdź ile zwróci dla "abc" a "abć".
- jeśli dane się nie zgadzają to zatrzymujesz wykonywanie skryptu przez exit, po co? Zrób gdzieś na początku zmienną
  1. $error = false
i gdy wystąpi błąd, zamieniasz ją na true. Później sprawdzasz jej status i wyświetlasz komunikat.
- Twoje wyrażenie regularne nie przepuści nazwisk innych niż zakres A-Za-z, a co z ółśćźż i innymi, zamiast tego użyj \w
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.