Kurs WWW. Paweł Rajba.

Podobne dokumenty
Wprowadzenie. Rozdział 23 PDO. Podstawowe kroki aplikacji. Źródło danych

Podstawy programowania III WYKŁAD 2

BAZY DANYCH. Obsługa bazy z poziomu języka PHP. opracowanie: Michał Lech

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych:

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Sprawdzenie czy połączenie przebiegło poprawnie if (mysqli_connect_errno()) { echo Błąd; Połączenie z bazą danych nie powiodło się.

Bazy danych w PHP. PHPMyAdmin

Dostęp do baz danych z serwisu www - PHP. Wydział Fizyki i Informatyki Stosowanej Joanna Paszkowska, 4 rok FK

Oracle PL/SQL. Paweł Rajba.

Wykład 5: PHP: praca z bazą danych MySQL

Sprzeg podstawowy do baz danych w PHP Mateusz Sowa, 2007

Dostęp do baz danych przy wykorzystaniu interfejsu PDO

ODBC polecenia i funkcje

Język SQL, zajęcia nr 1

PHP: bazy danych, SQL, AJAX i JSON

Oracle PL/SQL. Paweł Rajba.

Database Connectivity

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

Administracja i programowanie pod Microsoft SQL Server 2000

Odnawialne Źródła Energii I rok. Tutorial PostgreSQL

Zagadnienia. Konstrukcja bibliotek mysql i mysqli w PHP. Dynamiczne generowanie stron. Połączenie, zapytanie i sesja

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

Używając wspólnego interfejsu programowania

Bazy Danych i Usługi Sieciowe

Systemy internetowe. Wykład 4 mysql. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

Dostęp do DBMS w Prologu za pomocą API ODBC

Projektowanie systemów baz danych

Metody dostępu do danych

Internetowe bazy danych

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Kurs WWW. Paweł Rajba.

Paweł Rajba

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

Żeby korzystać z opisywanego modułu, należy go włączyć do kompilowanej wersji interpretatora PHP:

Systemy GIS Tworzenie zapytań w bazach danych

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

PODSTAWY BAZ DANYCH 13. PL/SQL

Języki skryptowe - PHP. PHP i bazy danych. Paweł Kasprowski. pawel@kasprowski.pl. vl07

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

PHP. Tematyka wykładów: Język PHP PHP i bazy danych Rozszerzenia PHP

Oracle PL/SQL. Paweł Rajba.

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Oracle PL/SQL. Paweł Rajba.

T-SQL dla każdego / Alison Balter. Gliwice, cop Spis treści. O autorce 11. Dedykacja 12. Podziękowania 12. Wstęp 15

Informatyka I. Programowanie aplikacji bazodanowych w języku Java. Standard JDBC.

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia

koledzy, Jan, Nowak, ul. Niecała 8/23, , Wrocław, , ,

Administracja i programowanie pod Microsoft SQL Server 2000

Informatyka I. Standard JDBC Programowanie aplikacji bazodanowych w języku Java

JDBC (Java Database Connectivity vit )

Instalacja MySQL.

5. Współpraca z bazą danych MySQL

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

Bazy danych II. Andrzej Grzybowski. Instytut Fizyki, Uniwersytet Śląski

Aby uruchomić program klienta i połączyć się z serwerem, należy komendę:

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

Ref. 7 - Język SQL - polecenia DDL i DML

mysql> UPDATE user SET Password=PASSWORD('pass') WHERE user='root'; Query OK, 2 rows affected (0.05 sec) Rows matched: 2 Changed: 2 Warnings: 0

1.1. System otwartych baz danych ODBC. System otwartych baz danych ODBC. Interfejs ODBC. Interfejs ODBC. System otwartych baz danych ODBC

Wykład 5. SQL praca z tabelami 2

1 LINQ. Zaawansowane programowanie internetowe Instrukcja nr 1

Bazy danych postgresql programowanie i implementacja

I.Wojnicki, PHP. PHP PHP Hypertext Preprocessor. Igor Wojnicki. Katedra Informatyki Stosowanej Akademia Górniczo-Hutnicza w Krakowie.

Smarty PHP. Leksykon kieszonkowy

DECLARE <nazwa_zmiennej> typ [(<rozmiar> )] [ NOT NULL ] [ { := DEFAULT } <wartość> ];

Bazy danych 7. SQL podstawy

Oracle PL/SQL. Paweł Rajba.

Procedury składowane. Funkcje vs. procedury Funkcja. Procedura. zazwyczaj ma parametry tylko typu IN; można wywoływać z poziomu

SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści

BAZY DANYCH Cz III. Transakcje, Triggery

15. Funkcje i procedury składowane PL/SQL

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

Bazy Danych i Usługi Sieciowe

Paweł Cieśla. Dokumentacja projektu

Wykład 2. SQL 1 Structured Query Lenguage

Język PL/SQL. Rozdział 2. Kursory

Programowanie w języku Java. Bazy danych SQLite w Javie

Autor: Joanna Karwowska

Kursor jawny. Rozdział 10a Kursory. Deklarowanie kursora (1) Deklarowanie kursora (2)

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

Bazy danych dla producenta mebli tapicerowanych. Bartosz Janiak Marcin Sikora Wrocław r.

Relacyjne bazy danych. Podstawy SQL

Informatyka I BAZY DANYCH. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2017

Administracja i programowanie pod Microsoft SQL Server 2000

Oracle11g: Wprowadzenie do SQL

Bazy danych i usługi sieciowe

Język SQL. Rozdział 9. Język definiowania danych DDL, część 2.

Administracja i programowanie pod Microsoft SQL Server 2000

Cele. Definiowanie wyzwalaczy

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Programowanie w SQL. definicja bloku instrukcji BEGIN...END, warunkowe wykonanie instrukcji IF...ELSE, wyrażenie CASE,

Sprawdzenie poziomu izolacji transakcji (w aktualnym połączeniu):

CREATE USER

Technologia informacyjna

Deklarowanie kursora. CURSOR nazwa [ ( param1 typ1 [,param2 typ2]... ) ] [RETURN typ zwracany] IS zapytanie SQL;

PL/SQL. Zaawansowane tematy PL/SQL

Programowanie po stronie serwera w SZBD. Robert A. Kłopotek Wydział Matematyczno-Przyrodniczy. Szkoła Nauk Ścisłych, UKSW

Materiały. Technologie baz danych. Plan wykładu Kursory. Wykład 5: Kursory jawne. Podprogramy. Kursory jawne. Kursory niejawne

Transkrypt:

Paweł Rajba pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/

Spis treści PHP i baz danych Korzystanie z bazy danych PostgreSQL Korzystanie z bazy danych MySQL Warstwa abstracji dla bazy danych PHP Data Objects (PDO) PEAR DB - 2 -

Korzystanie z bazy PostgreSQL Połączenie z bazą danych Składnia funkcji pg_connect( $connstring, [$typ_polaczenia] ) Opcje Akceptowane opcje w $connstring host, hostaddr, port, dbname, user, password, connect_timeout, options, sslmode, service Przykład łańcucha "host=sheep dbname=mary user=lamb password=foo" Jeśli jako typ połączenia podamy PGSQL_CONNECT_FORCE_NEW, za każdym razem będzie tworzone nowe połączenie - 3 -

Korzystanie z bazy PostgreSQL Wykonanie zapytania ver. 1 Składnia funkcji pg_query( string $connection, string $query ) Opcje $connection wynik zwrócony przez pg_connect() $query zapytanie Komentarz $connection można pominąć, ale nie będziemy tak robić - 4 -

Korzystanie z bazy PostgreSQL Wykonanie zapytania ver. 2 Składnia funkcji pg_query_params( string $connection, string $query, array $params ) Opcje $connection wynik zwrócony przez pg_connect() $query zapytanie z parametrami: $1, $2,... $params wartości parametrów (liczba musi się zgadzać) Komentarz $connection można pominąć, ale nie będziemy tak robić - 5 -

Korzystanie z bazy PostgreSQL Wykonanie zapytania ver. 3 Przygotowanie zapytania pg_prepare( resource $connection, string $stmtname, string $query ) parametry to $1, $2,... Wykonanie zapytania pg_execute( resource $connection, string $stmtname, array $params ) $params tablica z wartościami parametrów - 7 -

Korzystanie z bazy PostgreSQL Pobieranie błędów po wykonaniu zapytania pg_last_error( $connection ) pg_last_notice ( $connection ) Pobieranie liczby wierszy wyniku pg_num_rows( $result ) Zapytania typu SELECT pg_affected_rows( $result ) Zapytania typu INSERT, UPDATE, DELETE pg_num_fields ( $result ) Zwraca liczbę wierszy wyniku - 7 -

Korzystanie z bazy PostgreSQL Pobieranie wierszy wyniku pg_fetch_array ( resource $result, int $row [, int $result_type] ) Zwraca pojedynczy wiersz jako tablicę $result_type przyjmuje wartości: PGSQL_ASSOC, PGSQL_NUM i PGSQL_BOTH (domyślnie BOTH) W przypadku PGSQL_NUM kolumny są numerowane od 0 pg_fetch_assoc ( resource $result [, int $row] ) Podobne do pg_fetch_array z parametrem PGSQL_ASSOC pg_fetch_row ( resource $result, int $row ) Podobne do pg_fetch_array z parametrem PGSQL_NUM - 8 -

Korzystanie z bazy PostgreSQL Pobieranie wierszy wyniku array pg_fetch_all ( resource $result ) Wartości null będą miały Kilka innych funkcji int pg_field_is_null ( resource $result, int $row, mixed $field ) nry wierszy od 0, kolumna jako indeks lub nazwa bool pg_free_result ( resource $result ) Zamykanie połączenia bool pg_close ( [resource $połączenie] ) - 9 -

Korzystanie z bazy PostgreSQL Inny sposób wykonywania zapytań Dodawanie rekordów bool pg_insert ( resource $connection, string $table_name, array $assoc_array ) Usuwanie rekordów long pg_delete ( resource $connection, string $table_name, array $assoc_array ) Wybieranie rekordów array pg_select ( resource $connection, string $table_name, array $assoc_array - 10 -

Korzystanie z bazy PostgreSQL Przykłady postgres1.php postgres2.php postgres3.php postgres4.php - 11 -

Korzystanie z bazy MySQL Mamy dostępne dwa interfejsy do MySQLa MySQL (inaczej mysql) Improved MySQL (inaczej mysqli) Zmiany w wersji improved Zgodność z MySQL 4.1 i wyższe Instrukcje preparowane i parametry dowiązywane Interfejs zorientowany obiektowo Połączenia zabezpieczone SSLem - 12 -

Korzystanie z bazy MySQL Połączenie z bazą danych Wersja proceduralna mysqli mysqli_connect ( [string $host [, string $username [, string $passwd [, string $dbname [, int $port ]]]]] ) Wersja obiektowa class mysqli { construct ( [string $host [, string $username [, string $passwd [, string $dbname [, int $port ]]]]] ) } Pobieranie błędów połączenia int mysqli_connect_errno ( void ) string mysqli_connect_error ( void ) - 13 -

Korzystanie z bazy MySQL Wykonanie zapytania ver. 1 Wersja proceduralna mixed mysqli_query ( mysqli $link, string $query [, int $resultmode] ) Wersja obiektowa class mysqli { mixed query ( string $query [, int $resultmode] ) } Parametr $resultmode może mieć wartości MYSQLI_USE_RESULT MYSQLI_STORE_RESULT (domyślnie) Znaczenie parametru $resultmode - 14 -

Korzystanie z bazy MySQL Pobieranie błędów po wykonaniu zapytania ver. 1 int mysqli_errno ( mysqli $link ) class mysqli { int errno } string mysqli_error ( mysqli $link ) class mysqli { string error } - 15 -

Korzystanie z bazy MySQL Pobieranie wyników ver. 1 mixed mysqli_fetch_array ( mysqli_result $result [, int $resulttype] ) Parametr $resulttype może przyjmować wartości MYSQLI_ASSOC MYSQLI_NUM MYSQLI_BOTH (domyślnie) mixed mysqli_fetch_row ( mysqli_result $result ) class mysqli_result { mixed fetch_row ( void ) } array mysqli_fetch_assoc ( mysqli_result $result ) class mysqli_result { array fetch_assoc ( void ) } - 16 -

Korzystanie z bazy MySQL Wykonanie zapytania ver. 2 Utworzenie sparametryzowanego zapytania Parametry przykazujemy przez znak? Tworzymy pusty uchwyt do przygotowanego zapyt. mysqli_stmt mysqli_stmt_init ( mysqli $link ) class mysqli { mysqli_stmt stmt_init ( void ) } Przygotowania zapytania bool mysqli_stmt_prepare ( mysqli_stmt $stmt, string $query ) class mysqli_stmt { mixed prepare ( string $query ) } - 17 -

Korzystanie z bazy MySQL Wykonanie zapytania ver. 2 Wiązanie parametrów wejściowych bool mysqli_stmt_bind_param ( mysqli_stmt $stmt, string $types, mixed &$var1 [, mixed &$...] ) class mysqli_stmt { bool bind_param ( string $types, mixed &$var1 [, mixed & $...] ) } Parametr types określa typy kolejnych parametrów Typy mogą być następujące i liczba całkowita d liczba zmiennoprzecinkowa s łańcuch znaków b,,blob'' - 18 -

Korzystanie z bazy MySQL Wykonanie zapytania ver. 2 Wiązanie parametrów wyjściowych bool mysqli_stmt_bind_result ( mysqli_stmt $stmt, mixed &$var1 [, mixed &$...] ) class mysqli_stmt { bool bind_result ( mixed &$var1 [, mixed &$...] ) } Wykonywanie przygotowanego zapytania bool mysqli_stmt_execute ( mysqli_stmt $stmt ) class mysqli_stmt { bool execute ( void ) } - 19 -

Korzystanie z bazy MySQL Pobranie wyników zapytania ver. 2 bool mysqli_stmt_fetch ( mysqli_stmt $stmt ) class mysqli_stmt { bool fetch ( void ) } Wyniki będą w odpowiednio związanych zmiennych Pobieranie błędów po wykonaniu zapytania ver. 2 int mysqli_stmt_errno ( mysqli_stmt $stmt ) class mysqli_stmt { int errno } string mysqli_stmt_error ( mysqli_stmt $stmt ) class mysqli_stmt { string error } - 20 -

Korzystanie z bazy MySQL Ustalenie liczby zmodyfikowanych wierszy Dla poleceń INSERT, UPDATE i DELETE int mysqli_stmt_affected_rows ( mysqli_stmt $stmt ) class mysqli_stmt { int affected_rows } Dla poleceń SELECT int mysqli_stmt_num_rows ( mysqli_stmt $stmt ) class mysqli_stmt { int num_rows } Zwalnianie zasobów void mysqli_stmt_free_result ( mysqli_stmt $stmt ) class mysqli_stmt { void free_result ( void ) } - 21 -

Korzystanie z bazy MySQL Pobranie liczby parametrów int mysqli_stmt_param_count ( mysqli_stmt $stmt ) class mysqli_stmt { int param_count } Zamknięce przygotowanego zapytania bool mysqli_stmt_close ( mysqli_stmt $stmt ) class mysqli_stmt { bool close ( void ) } Zamknięcie połączenia do bazy danych bool mysqli_close ( mysqli $link ) class mysqli { bool close ( void ) } - 22 -

Korzystanie z bazy MySQL Przykłady mysql1.php mysql2.php mysql3.php mysql4.php - 23 -

Warstwa abstrakcji Co to jest warstwa abstrakcji dla bazy danych i po co to robić? Przenośność pomiędzy różnymi serwerami bd Problem z różnicami pomiędzy serwerami SQL Łatwiejsza możliwość modyfikacji fragmentów kodu dotyczących warstwy bd - 24 -

Warstwa abstrakcji Propozycje warstw abstrakcji database1.php database2.php database3.php - 25 -

PHP Data Objects (PDO) Wprowadzenie PDO jest implementacji abstrakcji w dostępie do baz danych Dostępne od wersji 5 wymaga nowego interfejsu obiektowego Zwykle trzeba doinstalować odpowiednie moduły Do każdej bazy danych jest używany odpowiedni sterownik Dostępne sterowniki: PDO_* DBLIB, FIREBIRD, IBM, INFORMIX, MYSQL, OCI, ODBC, PGSQL, SQLITE - 26 -

PHP Data Objects (PDO) Połączenie z bazą danych Następuje w momencie utworzenia obiektu Składnia konstruktora construct( $dsn, $user, $password [, $drvoptions] ) Opcje $dsn określenie bazy danych $user użytkownik $password hasło $drvoptions dodatkowe opcje steronika przekazywane poprzez tablicę z ustawionymi kluczami i wartościami, np. array( PDO::ATTR_PERSISTENT => true ) - 27 -

PHP Data Objects (PDO) Połączenie z bazą danych Parametr DSN może przyjmować jedną z trzech postaci: Jawne wskazanie bazy danych np. 'mysql:host=localhost;dbname=test' Wskazanie pliku z parametrami np. 'uri:file:///usr/local/dbconnect' Podanie nazwy aliasu zdefiniowanego w pliku php.ini po prostu nazwa aliasu + definicja w pliku php.ini Zamknięcie połączenia Przypisanie obiektowi wartości null - 28 -

PHP Data Objects (PDO) Atrybuty połączenia Ustawianie PDO->setAttribute( int $attribute, mixed $value ) Pobieranie PDO->getAttribute( int $attribute ) Dostępne atrybuty SET: PDO::ATTR_CASE, PDO::ATTR_ERRMODE, PDO::ATTR_ORACLE_NULLS, PDO::ATTR_STRINGIFY_FETCHES, PDO::ATTR_STATEMENT_CLASS, PDO::ATTR_AUTOCOMMIT, PDO::MYSQL_ATTR_USE_BUFFERED_QUERY GET: PDO::ATTR_AUTOCOMMIT PDO::ATTR_CASE PDO::ATTR_CLIENT_VERSION PDO::ATTR_CONNECTION_STATUS PDO::ATTR_DRIVER_NAME PDO::ATTR_ERRMODE PDO::ATTR_ORACLE_NULLS PDO::ATTR_PERSISTENT PDO::ATTR_PREFETCH PDO::ATTR_SERVER_INFO PDO::ATTR_SERVER_VERSION PDO::ATTR_TIMEOUT - 29 -

PHP Data Objects (PDO) Wykonywanie zapytań ver. 1 Dla zapytań typu INSERT, UPDATE, DELETE PDO->exec( string $zapytanie ) Dla zapytań typu SELECT PDO->query( string $zapytanie ) PDO->query ( string $statement, int $PDO::FETCH_CLASS, string $classname ) PDO->query ( string $statement, int $PDO::FETCH_INTO, object $object ) - 30 -

PHP Data Objects (PDO) Pobranie ostatnio wstawionego id string lastinsertid ( [string $name] ) zależy sporo od sterownika, np. w postgresie jako name podaje się nazwę sekwencji Transakcje bool PDO->beginTransaction() bool PDO->commit() bool PDO->rollBack() - 31 -

PHP Data Objects (PDO) Pobranie błędów string PDO->errorCode() Zwrócony zostanie SQLSTATE, czyli kod 5-znakowy zgodny ze standardem ANSI SQL array PDO->errorInfo() Zwrócona tablica zawiera trzy wartości 0 => kod 5-znakowy zgodny ze standardem ANSI SQL 1 => kod błędu właściwy dla sterownika 2 => komunikat błędu właściwy dla sterownika - 32 -

PHP Data Objects (PDO) Wykonywanie zapytań ver. 2 Tworzymy kod zapytania W miejsce parametrów dajemy Znak? Nazwę parametru :param Wykonujemy polecenie PDOStatement PDO->prepare( string $statement [, array $driver_options] ) Najczęstsze użyciem parametru $driver_options to ustawienie parametru PDO::ATTR_CURSOR na wartości PDO::CURSOR_SCROLL lub PDO::CURSOR_FW DONLY - 33 -

PHP Data Objects (PDO) Wykonywanie zapytań ver. 2 c.d. Wiążemy parametry w zapytaniu bool PDOStatement->bindParam ( mixed $parameter, mixed &$variable [, int $data_type [, int $length [, mixed $driver_options]]] ) przekazywanie parametrów przez referencję istotne przy dużych parametrach i parametrach typu INOUT bool PDOStatement->bindValue ( mixed $parameter, mixed $value [, int $data_type] ) przekazywanie parametrów przez wartość - 34 -

PHP Data Objects (PDO) Wykonywanie zapytań ver. 2 c.d. Typy danych mogą być następujące PDO::PARAM_BOOL odpowiada typu boolean w SQL PDO::PARAM_NULL odpowiada typowi null w SQL PDO::PARAM_INT odpowiada typowi integer w SQL PDO::PARAM_STR odpowiada typom char i varchar w SQL PDO::PARAM_LOB odpowiada typowi lob i blob w SQL - 35 -

PHP Data Objects (PDO) Wykonywanie zapytań ver. 2 c.d. Typy danych c.d. PDO::PARAM_STMT odpowiada typowi reprezentującemu w SQL-u zbiór danych, np. kursory aktualnie nie wspierany przez żadne sterowniki PDO::PARAM_INPUT_OUTPUT określa, że w procedurze parametr jest typu INOUT w użyciu łączy się poprzez operator ( ) w z innym typem danych PDO::PARAM_* - 36 -

PHP Data Objects (PDO) Wykonywanie zapytań ver. 2 c.d. Wykonanie zapytania bool PDOStatement->execute ( [array $input_parameters] ) Przekazywanie parametrów Albo przez wcześniejsze wiązanie Albo przez parametr $input_parameters execute(array($calories, $colour)) w przypadku parametrów pozycyjnych execute(array(':calories' => $calories, ':colour' => $colour)); w przypadku parametrów nazwanych - 37 -

PHP Data Objects (PDO) Wykonywanie zapytań ver. 2 c.d. Przechwytywanie błędów string PDOStatement->errorCode() Analogiczne do PDO->errorCode() array PDOStatement->errorInfo() Analogiczne do PDO->errorInfo() - 38 -

PHP Data Objects (PDO) Wykonywanie zapytań ver. 2 c.d. Pobieranie wyników mixed PDOStatement->fetch( [int $fetch_style [, int $cursor_orientation [, int $cursor_offset]]] ) Opcje Parametr $fetch_style może przymować wartości: PDO::FETCH_ASSOC, PDO::FETCH_BOTH, PDO::FETCH_NUM, PDO::FETCH_OBJ Parametr $cursor_orientation może przyjmować wartości: PDO::FETCH_ORI_NEXT, PDO::FETCH_ORI_PRIOR, PDO::FETCH_ORI_FIRST, PDO::FETCH_ORI_LAST, PDO::FETCH_ORI_ABS, PDO::FETCH_ORI_REL Ostatni parametr ma znaczenie wraz niektórymi wartościami poprzedniego parametru - 39 -

PHP Data Objects (PDO) Wykonywanie zapytań ver. 2 c.d. Pobieranie wyników (całej tabeli) array PDOStatement->fetchAll () Pobieranie wyników przez wiązanie parametrów bool PDOStatement->bindColumn( mixed $column, mixed &$param [, int $type] ) $column określa kolumnę na liście SELECT $param określa zmienną, do której będą przekazywane wyniki $type określa typ wiązanego parametru (PDO::PARAM_*) Używa się w połączeniu z funkcją PDOStatement->fetch() - 40 -

PHP Data Objects (PDO) Wykonywanie zapytań ver. 2 c.d. Ustawienie rodzaju pobierania (przed pobieraniem) bool PDOStatement->setFetchMode ( int $mode ) Parametr $mode przyjmuje wartości takie jak parametr $fetch_style z funkcji PDOStatement->fetch() Zwalnianie zasobów związanych ze,,statement'' bool PDOStatement->closeCursor() - 41 -

PHP Data Objects (PDO) Przykłady pdo_mysql1.php pdo_mysql2.php pdo_mysql3.php pdo_mysql4.php pdo_mysql5.php - 42 -

PEAR DB Wprowadzenie Jeden z komponentów obsługi baz danych w ramach PEAR Database Inny interfejs obsługi baz danych W ramach pakietu PEAR dostępne są też inne komponenty do obsługi baz danych DB_DataObject, DB_DataObject_FormBuilder DB_Pager, DB_QueryTool, DB_Table MDB, DB2, MDB_QueryTool Dokumentacja http://pear.php.net/manual/en/package.database.php - 43 -

PEAR DB Wprowadzenie Obsługiwane rodzaje baz danych: dbase (dbase), FrontBase (fbsql), InterBase (ibase), Informix (ifx), Mini SQL (msql), Microsoft SQL Server (mssql), MySQL <= 4.0 (mysql), MySQL >= 4.1 (mysqli), Oracle 7/8/9 (oci8), ODBC (odbc), PostgreSQL (pgsql), SQLite (sqlite), Sybase (sybase) Instalacja Pobranie i rozpakowanie pakietów PEAR i DB Wstawienie w pliku php.ini wpisu include_path="ścieżka do DB.php" - 44 -

PEAR DB Połączenie z bazą danych Odbywa się poprzez konstrukcję $conn = DB::connect( $dsn ) Parametr $dsn może być napisem lub tablicą Format DSN-a Napis: [typ bazy]://[użytkownik]:[hasło]@[serwer]/[nazwa bazy] Tablica z elementami o kluczach: phptype, dbsyntax, username, password, hostspec, database, port - 45 -

PEAR DB Połączenie z bazą danych Przykładowe DSN-y mysql://root@localhost/test pgsql://postgres:pgsql812@localhost/postgres array( 'phptype' => 'pgsql', 'username' => 'postgres', 'password' => 'pgsql812', 'hostspec' => 'localhost', 'database' => 'postgres', ) array( 'phptype' => 'sqlite', 'database' => 'thedb', 'mode' => '0644', ); Rozłączenie z bazą danych Odbywa się poprzez następujące wywołanie funkcji $conn->disconnect() - 46 -

PEAR DB Przechwytywanie błędów Kontrukcja DB::isError( $conn ) określa, czy wynik (zmienna) jest błędem Jeśli jest, możemy pobrać Komunikat błędu $conn->getmessage() Kod błędu $conn->getcode() Raporty bezpośrednio z systemu DBMS db->getuserinfo() db->getdebuginfo() - 47 -

PEAR DB Wykonywanie zapytań ver. 1 Służy do tego funkcja query(), która zwraca obiekt klasy DB_result w przypadku zapytań SELECT stałą DB_OK w przypadku zapytań modyfikujących dane DB_ERROR w przypadku błędu Składnia mixed &query (string $query [, mixed $params = array()]) Parametry $query zapytanie, w którym można wstawiać parametry $params tablica parametrów, które z mapują się na kolejne znaki "?" w $query - 48 -

PEAR DB Wykonywanie zapytań ver. 2 Najpierw zapytanie jest przygotowywane resource prepare (string $query) Zmienna $query może mieć parametry (znak?) Następnie wykonywane mixed &execute (resource $stmt [, mixed $data=array()]) Drugi parametr to tablica wartości do zapytania Zwraca DB_result, DB_OK lub DB_Error integer executemultiple (resource $stmt, array $data) Drugi parametr to tablica dwuwymiarowa wartości do zapytania Wykonuje zapytanie wielokrotnie dla kolejnych elementów $data Zwraca DB_OK lub DB_Error - 49 -

PEAR DB Ustawienie domyślnego trybu pobierania danych Odnosi się do metod fetch*() i get*() Polecenie void setfetchmode (integer $fetchmode [, string $object_class = stdclass]) Parametry Parametr $fetchmode może przyjmować wartości: DB_FETCHMODE_ORDERED DB_FETCHMODE_ASSOC DB_FETCHMODE_OBJECT Parametr $object_class ma sens przy ustawieniu poprzedniego parametru na DB_FETCH_OBJECT - 50 -

PEAR DB Pobieranie wierszy z wyniku typu DB_result Służą do tego dwie metody mixed &fetchrow ([integer $fetchmode = DB_DEFAULT_MODE [, integer $rownum = NULL]]) Zwraca wiersz danych integer fetchinto (array &$arr [, integer $fetchmode = DB_FETCHMODE_DEFAULT [, integer $rownum = NULL]]) W iersz danych jest wprowadzany do pierwszego parametru Tryb pobierania można ustawić na wartości DB_FETCHMODE_(ORDERED ASSOC OBJECT) Ostatni parametr określa numer wiersza do pobrania (numerowanie od 0) - 51 -

PEAR DB Pobieranie danych bezpośrednio z DB_common Mamy do tego następujące metody array &getall (string $query [, array $params = array() [, integer $fetchmode = DB_FETCHMODE_DEFAULT]]) Znaczenie parametrów takie samo jak tych w metodzie fetch() array &getassoc (string $query [, boolean $force_array = FALSE [, mixed $params = array() [, integer $fetchmode = DB_FETCHMODE_DEFAULT ]]]) mixed &limitquery (string $query, integer $from, integer $count [, mixed $params = array()]) Podobne do getall(), ale pierwszym rekordem jest $from (numeracja od 0) liczba zwróconych rekordów jest określona przez $count - 52 -

PEAR DB Pobieranie danych bezpośrednio z DB_common Mamy do tego następujące metody c.d. mixed &getone (string $query [, mixed $params = array()]) Zwrócona zostaje pierwsza kolumna pierwszego wiersza wyniku, a następnie pamięć dla wyniku zostaje zwolniona array &getrow (string $query [, array $params = array() [, integer $fetchmode = DB_FETCHMODE_DEFAULT]]) Można przekazywać do $query parametry - 53 -

PEAR DB Automatyczne generowanie zapytań Stosuje się do zapytań typu INSERT i UPDATE Najpierw jest przygotowanie zapytania: resource autoprepare (string $table, array $table_fields, integer $mode = DB_AUTOQUERY_INSERT [, string $where = FALSE]) Znaczenie parametrów $table, $table_fields nazwa tabelki, lista pól objętych operacją $mode dwie akceptowane wartości: DB_AUTOQUERY_INSERT or DB_AUTOQUERY_UPDATE $where określa warunek dla zapytania typu UPDATE Potem można wykonać poprzez funkcje execute() lub executemultiple() - 54 -

PEAR DB Automatyczne generowanie i wykonanie zapytań Stosuje się do zapytań typu INSERT i UPDATE Mamy do tego funkcję integer autoexecute (string $table, array $fields_values [, integer $mode = DB_AUTOQUERY_INSERT [, string $where = FALSE]]) Znaczenie parametrów takie samo jak tych w funkcji autoprepare() Działanie funkcji podobne do działania funkcji autoprepare(), przy czym zapytanie jest od razu wykonywane - 55 -

PEAR DB Sekwencje Przydatne przy wstawianiu wierszy do tabel Ułatwia panowanie nad identyfikatorami wstawianych rekordów Tworzenie sekwencji integer createsequence (string $seq_name) Zwracane wartości to DB_OK lub DB_Error Usuwanie sekwencji integer dropsequence (string $seqname) Zwracane wartości to DB_OK lub DB_Error - 56 -

PEAR DB Sekwencje Pobieranie wartości z sekwencji integer nextid (string $seq_name, boolean $ondemand = TRUE) Drugi parametr ustawiony na TRUE powoduje automatyczne utworzenie sekwencji w przypadku, gdy sekwencja nie istnieje Transakcje mixed autocommit ([boolean $onoff = FALSE]) mixed commit () mixed rollback () - 57 -

PEAR DB Inne przydatne funkcje integer DB_result::numCols () Zwraca liczbę kolumn w wyniku integer DB_result::numRows () Zwraca liczbę wierszy wyniku mixed DB_common::quoteSmart (mixed $in) Podobne do np. pg_quote_string() z PostgreSQL-a integer DB_common::affectedRows () Zwraca liczbę,,zmodyfikowanych'' wierszy przez ostatnio wykonaną funkcję query() Zwraca 0 dla zapytań typu SELECT - 58 -

PEAR DB Przykłady pear1.php pear2.php pear3.php - 59 -