Autor podstrony: Krzysztof Zajączkowski

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

Layout wykonany przez autora strony, wszelkie prawa zastrzeżone. Jakiekolwiek użycie części lub całości grafik znajdujących się na tej stronie bez pisemnej zgody jej autora surowo zabronione.