PHP jako interfejs PostgreSQLa dr in\. Krzysztof Juszkiewicz Wiedza " Strona główna: http://www.php.net/ " Mirrory w Polsce: http://pl.php.net/ (mainseek.com) http://pl2.php.net/ (estrefa.pl) " Manual: http://www.php.net/manual/en/ " Po polsku: http://www.php.net/manual/pl/ " Polski FAQ usenetowy: http://php.faq.pl/ " Przykłady: http://eit.agh.edu.pl/~juszkiew (mogą pojawić się nowe w zale\ności od potrzeb) 2 Cechy PHP " Język interpretowany Wersje PHP: vs. szybkość, ?????? v.6.0.0, " Przenośność i 1.03.07 v.4.4.6, popularność, 8.02.07 v.5.2.1, " Du\a liczba modułów, 13.07.04 v.5.0.0, " Rozwojowość, 22.04.02 v.4.2.0, 10.12.01 v.4.1.0, " Dynamiczne zmienne, 22.05.00 v.4.0.0, " Wyra\enia regularne, " Obiektowość 3 Najprostszy plik php " Nazwa z rozszerzeniem .php (np. plik.php) " Kod php pomiędzy znacznikami lub ... ?> " Mo\na uruchomić z palca (np. php plik.php) phpinfo(); /*strona informacyjna*/ ?> 4 Kod PHP a HTML " Aączenie kodu HTML z programem w PHP daje mo\liwość warunkowego wyświetlania kodu HTML.
if(isset($zmienna))) { ?>
wartość: =$zmienna?>
} ?>
5 Schemat pliku PHP " start sesji, " połączenie do bazy danych, " operacje na bazie (modyfikacje, wyciąganie danych), " prezentacja efektów w HTML " rozłączenie bazą 6 Zmienne skalarne " Liczba: $x = 3; " Tekst: $y='tekst'; $z="tekst $x"; Zmienne wektorowe $w=array(); " Pusta lista: count($w); " Liczba elementów: $w[]="wart"; " Dodanie na koniec: $w[7]=$x; " Ustawienie ósmego elementu: 7 Typy wartości " Nieustawiona: NULL, isset(), unset(), " Fałsz: False, 0, 0.0, "", "0", array(), " yle: jeśli sprawdzmy wartość nieustawioną: PHP Notice: Undefined variable 8 Tablice są asocjacyjne (hasze) $h=array('A'=>3); " Tworzenie: $h['A'] = 3; " Wartość dla klucza: array_push() array_shift() Tablica array_pop() array_unshift() Niepotrzebna jest konwersja z tablicy na hasz 9 Obsługa tablic for ($x=0;$xcontinue; //Dalszy ciąg pętli break; //Wyjście z pętli }?> foreach ($lista as $wart){ }?> // Te\ pętla po wartościach foreach ($lista as $klucz => $wart){ ?> Dla =$klucz?> jest =$wart?>zł }?> 10 Zmienne predefiniowane " $_SERVER serwera (te\ nagłówki HTTP) " $_ENV środowiska " $_COOKIE ciastek " $_GET metody GET " $_POST metody POST " $_REQUEST trzy powy\sze " $_FILES odbierania plików " $_SESSION sesyjne 11 Problemy cudzysłowów Dodawanie odwrotnych ukośników \ $w = pg_escape_string($w); $query = "SELECT id FROM tabela WHERE nazwa='$w'"; Zamiana (&,<,>,") na encje z ampersandami &xxx; value="=htmlspecialchars($w)?>"> Lepsza funkcja: htmlentities 12 Typowe zapytania " Modyfikujące wiersze affected rows: INSERT, UPDATE, DELETE " Wyciągające dane: SELECT * FROM ... numery 0 1 2 3 4 5 kolumn imie nazw data konto debet inne nazwy ... ... ... ... ... ... wiersze ... ... ... ... ... ... (rows) ... ... ... ... ... ... 13 PHP funkcje (po zmianie 4.2.0) $dbconn = pg_connect ("dbname=nazwa_bazy połączenie user=uzytkownik password=haslo"); zapytanie SQL $res = pg_query($dbconn,$sql); liczba po SELECT $num = pg_num_rows ($res); liczba po NON-SELECT $num = pg_affected_rows($res); wiersz wyniku $arr = pg_fetch_array($res); wiersz wyniku $arr = pg_fetch_assoc($res); wszystkie wiersze $arr = pg_fetch_all($res); ostatni OID $oid = pg_last_oid($res); rozłączenie pg_close($dbconn); 14 Obsługa błędów Operator ignorowania błędów @: $dbconn = @pg_connect(); Tekst ostatniego błędu w połączeniu: $str = pg_last_error(); Tekst błędu dla wyniku $res: $str = pg_result_error($res); Tekst ostatniej informacji serwera: $str = pg_last_notice($dbconn); 15 PHP przykład fetch_array
} pg_close(); ?> 17 Transakcje " Nie da się trzymać pomiędzy \ądaniami WWW, bo nie ma pewności na trafienie do tego samego procesu. " Nie ma specjalnych funkcji w PHP wykonuje się pg_query z kolejnymi komendami (mo\na w jednym wywołaniu). 18 New func. >= 5.1.0, psql >= 7.4 Nie działają na EiT (7.3.1) $dbconn = pg_connect (" ... "); $result = pg_prepare($dbconn, "myq", 'SELECT fname FROM pers WHERE sname = $1'); $result = pg_execute($dbconn, "myq", array("Juszkiewicz")); $result = pg_execute($dbconn, "myq", array("Stankiewicz")); 19 Sesje pamiętanie wartości " Przekazywany tylko identyfikator sesji " Przed jakimkolwiek kodem HTML funkcja session_start() " Mo\na przekazywać jedynie wartości zmiennych (nie referencje) " Odczytujemy i zapisujemy $_SESSION " Inne funkcje session_ obsługi zmiennych mogą nie działać 20 Zalecenia " Nie wykorzystywać kolejności kolumn w bazie (SELECT *) przez odniesienia numeryczne " Jak najwięcej pracy przez silnik bazy (np. sortowanie, wybieranie) " Oddzielać kod PHP i HTML nie stosować funkcji echo i print* " Nie korzystać ze stałych połączeń 21 Pomocne funkcje " pokazywanie błędów: error_reporting(value) " wyświetlanie wektorów: print_r($arr), var_dump($arr) " dostowanie zmiennych: extract($_REQUEST,EXTR_SKIP) " konwersja znaków nowych wierszy: nl2br($tekst) 22 Pecl i Pear pecl.php.net PHP Extension Community Library serwis z dodatkowymi rozszerzeniami do PHP (w C). pear.php.net PHP Extension and Application Repository serwis podobny z większą liczbą modułów i instalatorem: pear install 23 Obiektowość class myClass extends SimpleClass { public $var = 'a default value'; private $v = 'private'; protected function MyProtected() { echo $this; } } ?> konstruktor (__construct), destruktor (__destruct). 24 Szablon Smarty index.tpl
Informacja o u\ytkowniku
Nazwisko: {$name|capitalize}
{html_image file="picture.gif"} {include file="footer.tpl"} 25 Cechy Smarty " Rozdzielenie kodu HTML od aplikacji, " Aatwość zmiany wyglądu, " Większa szybkość działania (cache). include('Smarty.class.php'); $smarty = new Smarty; $smarty->caching = true; $smarty->assign('name', 'juszkiewicz'); $smarty->display('index.tpl'); 26