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:
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:
$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.