PHP-PDO - wysyłanie zapytań do bazy danych za pomocą metody query

Autor podstrony: Krzysztof Zajączkowski

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

Wstęp

Metoda query obiektu klasy PDO umożliwia wysyłanie zapytań do bazy danych w dość podobny sposób jak stare metody wysyłania zapytań do baz danych omówione na stronie Programowanie → PHP - podstawy → PHP - skorowidz funkcji związanych z mySql-em. Ważne jest aby nie korzystać z tej metody w przypadku, gdy dane wykorzystywane w zapytaniu pochodzą od użytkownika. W takim przypadku aby uniknąć możliwości celowego lub przypadkowego wstrzykiwania kodu SQL stosuje się inne metody, które zostaną omówione na innej podstronie tego działu.

Pobieranie danych z bazy danych

W przypadku wysyłania zapytania SELECT, jeżeli tylko zapytanie się powiedzie zwrócony powinien zostać obiekt klasy PDOStatement. Warto przyjrzeć się temu obiektowi nieco bliżej, toteż poniżej zamieszczam spis podstawowych jego metod:

public bool bindColumn ( mixed $column , mixed &$param [, int $type [, int $maxlen [, mixed $driverdata ]]] ) public bool bindParam ( mixed $parameter , mixed &$variable [, int $data_type = PDO::PARAM_STR [, int $length [, mixed $driver_options ]]] ) public bool bindValue ( mixed $parameter , mixed $value [, int $data_type = PDO::PARAM_STR ] ) public bool closeCursor ( void ) public int columnCount ( void ) public void debugDumpParams ( void ) public string errorCode ( void ) public array errorInfo ( void ) public bool execute ([ array $input_parameters ] ) public mixed fetch ([ int $fetch_style [, int $cursor_orientation = PDO::FETCH_ORI_NEXT [, int $cursor_offset = 0 ]]] ) public array fetchAll ([ int $fetch_style [, mixed $fetch_argument [, array $ctor_args = array() ]]] ) public mixed fetchColumn ([ int $column_number = 0 ] ) public mixed fetchObject ([ string $class_name = "stdClass" [, array $ctor_args ]] ) public mixed getAttribute ( int $attribute ) public array getColumnMeta ( int $column ) public bool nextRowset ( void ) public int rowCount ( void ) public bool setAttribute ( int $attribute , mixed $value ) public bool setFetchMode ( int $mode )

Spośród powyższego zbioru najbardziej interesujące są następujące metody:

Przykładowa realizacja zapytania typu SELECT może wyglądać następująco:

$books = $pdo->query('SELECT id, title, author FROM books'); // wysyłanie zapytania echo('<p>Liczba dostępnych książek: ' . $books->rowCount()); // wyświetlanie ile książek jest w bazie danych echo('<ul>'); foreach($books as $book) // iterowanie po książkach { echo('<li>"' . $book['title'] . '" ' . $book['author'] . '</li>'); // wyświetlanie tytułu i autora książki } echo('</ul>'); $books->closeCursor(); // zamykanie obiektu zapytania

Powyższy kod można zrealizować również z wykorzystaniem metody fetch w następujący sposób:

$books = $pdo->query('SELECT id, title, author FROM books'); // wysyłanie zapytania echo('<p>Liczba dostępnych książek: ' . $books->rowCount()); // wyświetlanie ile książek jest w bazie danych echo('<ul>'); while($book = $books->fetch()) // dopóki metoda fetch nie zwróci FALSE to zwracana wartość jest rekordem danych { echo('<li>"' . $book['title'] . '" ' . $book['author'] . '</li>'); // wyświetlanie tytułu i autora książki } echo('</ul>'); $books->closeCursor(); // zamykanie obiektu zapytania

Gdy metoda query zawiedzie, to zwracana jest wartość FALSE.

Wysyłanie innych zapytań do bazy danych

Metoda query umożliwia wysyłanie wszystkich typów zapytań SQL i tych, które modyfikują lub wstawiają dane do bazy danych jak również tych, które zmieniają ustawienia połączenia z bazą danych. To jak takie zapytanie należy realizować zostało opisane w dziele Programowanie → Podstawy SQL-a.

Propozycje książek