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

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

Listing 1
  1. public bool bindColumn ( mixed $column , mixed &$param [, int $type [, int $maxlen [, mixed $driverdata ]]] )
  2. public bool bindParam ( mixed $parameter , mixed &$variable [, int $data_type = PDO::PARAM_STR [, int $length [, mixed $driver_options ]]] )
  3. public bool bindValue ( mixed $parameter , mixed $value [, int $data_type = PDO::PARAM_STR ] )
  4. public bool closeCursor ( void )
  5. public int columnCount ( void )
  6. public void debugDumpParams ( void )
  7. public string errorCode ( void )
  8. public array errorInfo ( void )
  9. public bool execute ([ array $input_parameters ] )
  10. public mixed fetch ([ int $fetch_style [, int $cursor_orientation = PDO::FETCH_ORI_NEXT [, int $cursor_offset = 0 ]]] )
  11. public array fetchAll ([ int $fetch_style [, mixed $fetch_argument [, array $ctor_args = array() ]]] )
  12. public mixed fetchColumn ([ int $column_number = 0 ] )
  13. public mixed fetchObject ([ string $class_name = "stdClass" [, array $ctor_args ]] )
  14. public mixed getAttribute ( int $attribute )
  15. public array getColumnMeta ( int $column )
  16. public bool nextRowset ( void )
  17. public int rowCount ( void )
  18. public bool setAttribute ( int $attribute , mixed $value )
  19. public bool setFetchMode ( int $mode )

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

  • fetch - pobiera rekord danych i zwraca go jako tablicę asocjacyjną;
  • rowCount - zwraca liczbę rekordów zwróconych przez zapytanie;
  • closeCursor - zamyka poprzednio zwrócony obiekt zapytania

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

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

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

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

Komentarze