PHP-PDO wysyłanie zapytania z bindowaniem danych

Stronę tą wyświetlono już: 77 razy

Ponieważ tak jak pisałem na poprzedniej stronie Programowanie → PHP - PDO → PHP-PDO - wysyłanie zapytań do bazy danych za pomocą metody query wysyłanie bezpośrednio zapytania SQL do bazy danych zawierającego informacje przychodzące od użytkownika z zewnątrz nie jest zbyt szczęśliwym rozwiązaniem to konieczne jest wykorzystanie mechanizmu podpinania danych. Takiego mechanizmu dostarcza metoda prepare klasy PDO oraz metody: bindValue oraz execute klasy PDOStatement, której obiekt zostanie zwrócony przez metodę prepare.

Oto przykład wysyłania zapytania z wykorzystaniem bindowania:

Listing 1
  1. $addBook = $pdo->prepare('INSERT INTO books ( title, author, price) VALUES( :title, :author, :price, :number)'); // tworzenie szablonu zapytania
  2. $addBook->bindValue(':title', $_POST['title'], PDO::PARAM_STR); // podpinanie kolejnych danych (tutaj z zaznaczeniem, że mają być typu string)
  3. $addBook->bindValue(':author', $_POST['author'], PDO::PARAM_STR);
  4. $addBook->bindValue(':price', (float)$_POST['price'], PDO::PARAM_STR);
  5. $addBook->bindValue(':number', $_POST['number'], PDO::PARAM_INT); // a tu podpinanie jako typ int
  6. $addedRecords = $addBook->execute(); // dopiero teraz będzie zapytanie wykonane co w przypadku powodzenia zwróci true
  7. if($addedRecords === true){
  8. echo('<p>Udało się dodać rekord danych</p>');
  9. }else{
  10. echo('<p>Coś nie tak! Nie dodało się nic nam!</p>');
  11. }

Jak widać w szablonie zapytania użyte zostały znaczniki :title, :author, :price i :number, które pozwalają na późniejsze podpięcie danych pochodzących z zmiennych otrzymanych od użytkownika. Dane podpinane są z poziomu otrzymanego obiektu klasy bindValue, która załącza niezbędne dane. Ważne jest, że metoda ta pozwala na kontrolę tego, jaki typ danych może być przekazany w zapytaniu oraz zapobiega możliwości wstrzykiwania kodu SQL.

Na końcu za pomocą metody execute zapytanie zostaje wykonane.

Komentarze