Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PDO i Class] zapytanie select z parametrem
molik
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 4.04.2017

Ostrzeżenie: (0%)
-----


Na wstępie witam wszystkich bardzo serdecznie!

Jestem początkujący jeśli chodzi o obiektówkę, dlatego też proszę o wyrozumiałość...
Mój problem polega na zapytaniu select z parametrem... Oczywiście wiem, że nie nie powinno tak wyglądać, ale próbuje już wszystkiego..

Zapytanie SELECT powinno wyglądać tak:

  1.  
  2. $sql = 'SELECT * FROM nazwa_tabeli';
  3. $result = $pdo->query(sql);
  4.  


Tyle wiem, ale co jeżeli chcę wprowadzić do niej parametr i nie wpisywać go bezpośrednio gdyż istnieje zagrożenie SQL Injection... ale już naprawdę nie mam na to pomysłu.. może Wy mi w tym pomożecie..
Wymyśliłem sobie oto taki zapis (konkretnie chodzi o metodę checkIfIsset()):

  1. $sql = 'SELECT nrComp FROM 08925902_k1.employers WHERE nrComp = :nrComp';
  2. $s = $pdo->prepare($sql);
  3. $s->bindValue(':nrComp', $this->nrComp);
  4. $s->execute();
  5. $this->employers = count($s);


Jak widać nie działa... bardzo Was proszę o pomoc...

Oto cały kod klasy:

  1. <?php
  2.  
  3. class RegisterEmployer{
  4. public $nrComp;
  5. public $firstName;
  6. public $lastName;
  7. public $password;
  8. public $employers;
  9.  
  10. public function __construct($nrComp, $firstName, $lastName, $password){
  11. $this->nrComp = $nrComp;
  12. $this->firstName = $firstName;
  13. $this->lastName = $lastName;
  14. $this->password = $password;
  15. }
  16.  
  17. public function wypiszDane(){
  18. echo '<p class="bg-info">'
  19. .$this->nrComp.'<br>'
  20. .$this->firstName.'<br>'
  21. .$this->lastName.'<br>'
  22. .$this->password.
  23. '</p>';
  24. }
  25.  
  26. public function registerEmployer(){
  27.  
  28. self::checkIfIsset();
  29.  
  30. if($this->employers > 0){
  31. echo '<p class="bg-warning">Taki numer komputerowy już istnieje w bazie danych.</p>';
  32. exit();
  33. }else{
  34. try {
  35. include 'inc/database.php';
  36. $sql = 'INSERT INTO 08925902.employers SET
  37. nrComp = :nrComp,
  38. firstName = :firstName,
  39. lastName = :lastName,
  40. password = :password
  41. ';
  42. $s = $pdo->prepare($sql);
  43. $s->bindValue(':nrComp', $this->nrComp);
  44. $s->bindValue(':firstName', $this->firstName);
  45. $s->bindValue(':lastName', $this->lastName);
  46. $s->bindValue(':password', SHA1($this->password));
  47. $s->execute();
  48. } catch (PDOException $e) {
  49. echo '<p class="bg-warning">'.$e->getMessage() .'<br>'.$e->getLine().'</p>';
  50. exit();
  51. }
  52. echo '<p class="bg-success">Dodano użytkownika do bazy danych.</p>';
  53. }
  54.  
  55. }
  56.  
  57. public function checkIfIsset(){
  58. try {
  59. include 'inc/database.php';
  60. $sql = 'SELECT nrComp FROM 08925902.employers WHERE nrComp = :nrComp';
  61. $s = $pdo->prepare($sql);
  62. $s->bindValue(':nrComp', $this->nrComp);
  63. $s->execute();
  64. $this->employers = count($s);
  65. } catch (PDOException $e) {
  66. echo '<p class="bg-warning">'.$e->getMessage() .'<br>'.$e->getLine().'</p>';
  67. exit();
  68. }
  69.  
  70. }
  71. }
  72.  
  73. ?>


kod uruchomienia:

  1. <?php
  2. if(isset($_POST['addEmployer'])){
  3. echo '<p class="bg-info">Przejdź do procedury dodawania pracownika.</p>';
  4.  
  5. $employer = new RegisterEmployer($_POST['nrComp'], $_POST['employerFirstName'], $_POST['employerLastName'], $_POST['employerPass']);
  6. $employer->registerEmployer();
  7. }else{
  8. include 'sites/form_registerEmployer.php';
  9. exit();
  10. }
  11.  
  12.  
  13. ?>


Ten post edytował molik 4.04.2017, 02:03:33
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
viking
post
Post #2





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Kod wyżej jest ok. Jedyne co to można by przekazać jako parametr do funkcji ten numer id.
Później jak zaczniesz poprawiać klasę to wyrzuć wszystkie echo bo za to powinna odpowiadać oddzielna warstwa widoku. Poczytaj też o wstrzykiwaniu zależności (chodzi o adapter bazy danych w tym konkretnym przykładzie).
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 7.10.2025 - 16:28