Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 3370 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:

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

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.