tai lieu huong_dan_ve_lap_trinh_php_7512

27
TÀI LIỆU HƯỚNG DẪN VỀ LẬP TRÌNH PHP Biên so n b i: Mr. C nh Phúc Hi u tr ng tr ng Đ i h c Đà N ng ưở ườ Ch nhi m khoa Công Ngh Thông Tin Thông tin liên h : [email protected] canhphucvn@hotmail. com Trình bày và hi u đính: Mr. CEO/pcdinh, Ch t ch kh i liên minh quân s B c Đ i Tây D ng NATO ủị ươ I.PHP là gì? PHP là m t ngôn ng l p trình ki u script, ch y trên Server và tr v mã HTML cho trình duy t. PHP ữậ g n nh đã tr thành m t ngôn ng l p trình Web r t ph bi n trên m ng hi n nay. ư ữậ ế PHP là ch vi t t t c a ế c m t "PHP Hypertext Preprocessor", t m d ch là ngôn ng ti n x lí các siêu văn b n. Các mã l nh PHP đ c nhúng vào các trang web, các trang này th ng có ph n m r ng là .php, .php3, .php4. Khi client g i yêu ượ ườ ởộ c u "c n t i các trang này v " đ n web server, đ u tiên web server s phân tích và thi hành các mã l nh PHP ế đ c nhúng trong, sau đó tr v m t trang web k t qu đã đ c x lí cho client. ượ ế ượ B n có th h i, t i sau có nhi u tuỳ ch n nh ASP, Cold Fusion, Perl, Java, Python nh ng chúng ta l i ư ư ch n PHP? Và câu tr l i là: b i nó là m t ngôn ng r t d dùng, d h c, cú pháp l nh đ n gi n, các bi n ảờ ữấ ơ ế không c n ph i khai báo tr c khi dùng, t đ ng ép ki u(typecast), ch y nhanh, t p hàm built-in r t phong ướ phú, có mã ngu n m II.Các cách làm vi c v i PHP: Có 4 cách đ dùng PHP: i. <? echo ("this is the simplest, an SGML processing instruction\n"); ?> ii. <?php echo("if you want to serve XML documents, do like this\n"); ?> iii. <script language="php"> to have a U. echo ("some editors don't like processing instructions"); </script> iv. <% echo ("You may optionally use ASP-style tags"); %> <%= $variable; # This is a shortcut for "<%echo .." %> Cách i ch có th s d ng n u nh ng tag ng n đ c cho phép s d ng. Có th sa ểử ế ượ ểử short_open_tag trong c u hình c a php ho c biên d ch file .php v i l a ch n cho phép dùng các tag ng n. T ng t nh v y, cách th iv ch có tác d ng n u asp_tag đ c đ t trong file c u hình c a PHP. ươ ư ế ượ III.Các ki u d li u: PHP h tr tám ki u d li u nguyên thu . B n ki u thông th ng là: ườ boolean, integer, floating- point number(float), string. Hai ki u ph c t p là: m ng( array) và đ i t ng ( ượ object). Và cu i cùng là hai ki u đ c bi t : resource NULL. Lo i d li u c a bi n thông th ng không đ c gán b i ng i l p trình ế ườ ượ ườ mà đ c quy t đ nh t i th i gian ch y c a ượ ế PHP, ph thu c vào ng c nh mà bi n đ c dùng. ế ượ 1. Boolean : đây là ki u đ n gi n nh t. M t ki u boolean bi u th m t giá tr th t. Nó có th ơ TRUE hay FALSE. Cú pháp : đ ch đ nh m t giá tr boolean, có th s d ng t khoá ểử TRUE hay là FALSE. C hai đ u không phân bi t ch hoa hay ch th ng. ườ Ví d : $foo=True; // gán giá tr TRUE cho bi n $foo. ế

Upload: lekytho

Post on 17-Jun-2015

4.873 views

Category:

Education


4 download

DESCRIPTION

day lap trinh PHP

TRANSCRIPT

Page 1: Tai lieu huong_dan_ve_lap_trinh_php_7512

TÀI LIỆU HƯỚNG DẪN VỀ LẬP TRÌNH PHPBiên so n b i: Mr. C nh Phúcạ ở ảHi u tr ng tr ng Đ i h c Đà N ngệ ưở ườ ạ ọ ẵCh nhi m khoa Công Ngh Thông Tinủ ệ ệThông tin liên h : ệ [email protected] và canhphucvn@hotmail. com

Trình bày và hi u đính: Mr. CEO/pcdinh, Ch t ch kh i liên minh quân s B c Đ i Tây D ng NATOệ ủ ị ố ự ắ ạ ươ

I.PHP là gì?

PHP là m t ngôn ng l p trình ki u script, ch y trên Server và tr v mã HTML cho trình duy t. PHPộ ữ ậ ể ạ ả ề ệ g n nh đã tr thành m t ngôn ng l p trình Web r t ph bi n trên m ng hi n nay. ầ ư ở ộ ữ ậ ấ ổ ế ạ ệ PHP là ch vi t t t c aữ ế ắ ủ c m t "PHP Hypertext Preprocessor", t m d ch là ngôn ng ti n x lí các siêu văn b n. Các mã l nh ụ ừ ạ ị ữ ề ử ả ệ PHP đ c nhúng vào các trang web, các trang này th ng có ph n m r ng là .php, .php3, .php4. Khi client g i yêuượ ườ ầ ở ộ ở c u "c n t i các trang này v " đ n web server, đ u tiên web server s phân tích và thi hành các mã l nh PHPầ ầ ả ề ế ầ ẽ ệ đ c nhúng trong, sau đó tr v m t trang web k t qu đã đ c x lí cho client.ượ ả ề ộ ế ả ượ ử

B n có th h i, t i sau có nhi u tuỳ ch n nh ASP, Cold Fusion, Perl, Java, Python nh ng chúng ta l iạ ể ỏ ạ ề ọ ư ư ạ ch n PHP? Và câu tr l i là: b i nó là m t ngôn ng r t d dùng, d h c, cú pháp l nh đ n gi n, các bi nọ ả ờ ở ộ ữ ấ ễ ễ ọ ệ ơ ả ế không c n ph i khai báo tr c khi dùng, t đ ng ép ki u(typecast), ch y nhanh, t p hàm built-in r t phongầ ả ướ ự ộ ể ạ ậ ấ phú, có mã ngu n m …ồ ở

II.Các cách làm vi c v i PHP:ệ ớ

Có 4 cách đ dùng PHP:ể

i. <? echo ("this is the simplest, an SGML processing instruction\n"); ?>ii. <?php echo("if you want to serve XML documents, do like this\n"); ?>

iii. <script language="php"> to have a U. echo ("some editors don't like processing instructions"); </script>

iv. <% echo ("You may optionally use ASP-style tags"); %><%= $variable; # This is a shortcut for "<%echo .." %>

Cách i ch có th s d ng n u nh ng tag ng n đ c cho phép s d ng. Có th s a ỉ ể ử ụ ế ữ ắ ượ ử ụ ể ử short_open_tag trong c u hình c a php ho c biên d ch file .php v i l a ch n cho phép dùng các tag ng n.ấ ủ ặ ị ớ ự ọ ắ

T ng t nh v y, cách th iv ch có tác d ng n u asp_tag đ c đ t trong file c u hình c a PHP.ươ ự ư ậ ứ ỉ ụ ế ượ ặ ấ ủ

III.Các ki u d li u:ể ữ ệ

PHP h tr ỗ ợ tám ki u d li u nguyên thuể ữ ệ ỷ. B n ki u thông th ng là: ố ể ườ boolean, integer, floating-point number(float), string. Hai ki u ph c t p là: m ng( ể ứ ạ ả array) và đ i t ng ( ố ượ object). Và cu i cùng là haiố ki u đ c bi t : ể ặ ệ resource và NULL. Lo i d li u c a bi n thông th ng không đ c gán b i ng i l p trìnhạ ữ ệ ủ ế ườ ượ ở ườ ậ mà đ c quy t đ nh t i th i gian ch y c a ượ ế ị ạ ờ ạ ủ PHP, ph thu c vào ng c nh mà bi n đ c dùng.ụ ộ ữ ả ế ượ

1. Boolean : đây là ki u đ n gi n nh t. M t ki u boolean bi u th m t giá tr th t. Nó có th làể ơ ả ấ ộ ể ể ị ộ ị ậ ể TRUE hay FALSE.

Cú pháp: đ ch đ nh m t giá tr ể ỉ ị ộ ị boolean, có th s d ng t khoá ể ử ụ ừ TRUE hay là FALSE. C hai đ uả ề không phân bi t ch hoa hay ch th ng.ệ ữ ữ ườ

Ví d : ụ $foo=True; // gán giá tr TRUE cho bi n $foo.ị ế

Page 2: Tai lieu huong_dan_ve_lap_trinh_php_7512

Đ có th chuy n m t giá tr sang ki u boolean, chúng ta có th dùng (bool) hay (boolean). Tuy nhiênể ể ể ộ ị ể ể trong h u h t các tr ng h p b n không c n ph i s d ng vi c ép ki u này, b i giá tr s đ c t đ ngầ ế ườ ợ ạ ầ ả ử ụ ệ ể ở ị ẽ ượ ự ộ chuy n n u nó là m t toán t , hàm hay là c u trúc đi u khi n đòi h i m t tham s ki u boolean.ể ế ộ ử ấ ề ể ỏ ộ ố ể

Chú ý: -1 đ c xem là TRUE, gi ng nh các giá tr khác 0 khác ( b t k là s d ng hay âm).ượ ố ư ị ấ ể ố ươ

2. Integer : là m t t p h p bao g m các s {...,-2,-1,0,1,2,...}.ộ ậ ợ ồ ố

Cú pháp: Integer có th đ c ch đ nh trong c s 10, c s th p l c phân hay c s bát phân, tuỳ ch nể ượ ỉ ị ơ ố ơ ố ậ ụ ơ ố ọ đi tr c b i d u - hay +. N u b n s d ng v i c s bát phân, b n ph i theo th t v i 0 đ ng tr c, còn đ iướ ở ấ ế ạ ử ụ ớ ơ ố ạ ả ứ ự ớ ứ ướ ố v i s th p l c phân thì 0x.ớ ố ậ ụ

Ví d nh sau:ụ ư

$a = 1234; # s th p phânố ậ$a = -123; # s âmố$a = 0123; # s bát phânố$a = 0x1A; # s th p l c phânố ậ ụ

Kích th c c a ki u d li u này là 32bit, và ướ ủ ể ữ ệ PHP không h tr ki u ỗ ợ ể unsigned integer. N u b n chế ạ ỉ đ nh m t s v t qua biên c a ki u d li u integer, nó s đ c xem nh ki u float. T ng t nh v y, khiị ộ ố ượ ủ ể ữ ệ ẽ ượ ư ể ươ ự ư ậ b n th c hi n m t phép toán mà k t qu tr v là m t s v t qua biên c a ki u integer, thì ki u float sạ ự ệ ộ ế ả ả ề ộ ố ượ ủ ể ể ẽ đ c tr v . Tuy nhiên, có m t l i trong PHP mà không ph i bao gi đi u này cũng đúng, nó liên quan đ n cácượ ả ề ộ ỗ ả ờ ề ế s âm. Ch ng h n, khi b n th c hi n -50000* $million, k t qu s là 429496728. Tuy nhiên, khi c hai toán tố ẳ ạ ạ ự ệ ế ả ẽ ả ử đ u là s d ng thì không có v n đ gì x y ra.ề ố ươ ấ ề ả

Đ chuy n m t giá tr sang ki u integer, ta có th dùng toán t ép ki u (int) hay (integer). Tuy nhiên,ể ể ộ ị ể ể ử ể trong h u h t các tr ng h p b n không c n ph i dùng toán t ép ki u đó, b i giá tr s đ c t đ ng chuy nầ ế ườ ợ ạ ầ ả ử ể ở ị ẽ ượ ự ộ ể sang n u toán t , hàm hay c u trúc đi u khi n đòi h i m t đ i s integer.ế ử ấ ề ể ỏ ộ ố ố

3. Ki u s th c (floats,doubles,hay real numbers)ể ố ự : có th đ c ch đ nh b ng cách s d ng m tể ượ ỉ ị ằ ử ụ ộ trong các cú pháp sau:

$a = 1.234; $a = 1.2e3; $a = 7E-10;Kích c c a ki u float tùy thu c vào platform, giá tr l n nh t là x p x 1.8e308ỡ ủ ể ộ ị ớ ấ ấ ỉ

4. String : là nh ng chu i các kí t .Trong PHP,m t kí t cũng t ng t nh m t byte,do đó có chínhữ ỗ ự ộ ự ươ ự ư ộ xác 256 kí t khác nhau.ự

Cú pháp: có th khai báo b ng ba cách khác nhau nh sau:ể ằ ư• D u nháy đ nấ ơ : cách d dàng nh t đ ch đ nh m t chu i đ n gi n là đóng nó trong m t d uễ ấ ể ỉ ị ộ ỗ ơ ả ộ ấ

nháy đ n.Ví d :echo 'le bao vy';ơ ụ• D u nháy képấ : n u chu i đ c đóng trong d u nháy kép("),PHP hi u s có thêm các chu i choế ỗ ượ ấ ể ẽ ỗ

các kí t đ c bi t ..... Ví d : \n;\t;\\;\$;…ự ặ ệ ụ• Heredoc: các khác đ phân đ nh chu i là s d ng cú pháp ("<<<"). Ch nên cung c p m t đ nhể ị ỗ ử ụ ỉ ấ ộ ị

danh sau <<<, sau đó là chu i và ti p là cùng tên đ nh danh đ đóng d u nháy. Đ nh danh dùng đ đóng ph iỗ ế ị ể ấ ị ể ả b t đ u b ng c t đ u tiên c a dòng. Đ nh danh đ c dùng ph i có tên gi ng nh trong các quy lu t đ t tênắ ầ ằ ộ ầ ủ ị ượ ả ố ư ậ ặ bi n trong PHP.ế

5. M ngả : là m t danh sách các ph n t có cùng ki u d li u.M ng có th là m ng m t chi u hayộ ầ ử ể ữ ệ ả ể ả ộ ề nhi u chi u.ề ề

Page 3: Tai lieu huong_dan_ve_lap_trinh_php_7512

• M ng m t chi u có ch m cả ộ ề ỉ ụ : là m ng đ c qu n lý b ng cách s d ng ch s d i ki uả ượ ả ằ ử ụ ỉ ố ướ ể integer đ bi u th v trí c a giá tr yêu c u.Cú pháp: ể ể ị ị ủ ị ầ $name[index1];

Ví dụ: m t m ng m t chi u có th đ c t o ra nh sau:ộ ả ộ ề ể ượ ạ ư

$meat[0]="chicken";$meat[1]="steak";$meat[2]="turkey";

N u b n th c thi dòng l nh sau: ế ạ ự ệ print $meat[1]; thì trên trình duy t s hi n th dòng sau: ệ ẽ ể ị steak.B n cũng có th s d ng hàm array( ) c a PHP đ t o ra m t m ng.Ví d : ạ ể ử ụ ủ ể ạ ộ ả ụ

$meat=array("chicken","steak","turkey");

• M ng m t chi u k t h pả ộ ề ế ợ : r t thu n l i khi dùng đ ánh x m t m ng s d ng các t h n làấ ậ ợ ể ạ ộ ả ử ụ ừ ơ s d ng các integer, nó giúp ta gi m b t th i gian và các mã yêu c u đ hi n th m t giá tr c th . Ví d : b nử ụ ả ớ ờ ầ ể ể ị ộ ị ụ ể ụ ạ mu n ghi l i t t c các th c ăn và các c p r u ngon.ố ạ ấ ả ứ ặ ượ

$pairings["zinfandel"] = "Broiled Veal Chops";$pairings["merlot"] = "Baked Ham";$pairings["sauvignon"] = "Prime Rib";

M t cách khác là b n có th s d ng hàm ộ ạ ể ử ụ array( ) c a PHP đ t o ra m t m ng lo i này, ví d nhủ ể ạ ộ ả ạ ụ ư sau:

$pairings = array( zinfandel => "Broiled Veal Chops", merlot => "Baked Ham",sauvignon => "Prime Rib",sauternes => "Roasted Salmon";

• M ng nhi u chi u có ch m cả ề ề ỉ ụ : ch c năng c a nó cũng gi ng nh m ng m t chi u có chứ ủ ố ư ả ộ ề ỉ m c, ngo i tr vi c nó có thêm m t m ng ch m c đ c dùng đ ch đ nh m t ph n t . Cú phápụ ạ ừ ệ ộ ả ỉ ụ ượ ể ỉ ị ộ ầ ử : $name[index1] [index2]..[indexN];

M t m ng hai chi u có ch m c đ c t o ra nh sau:ộ ả ề ỉ ụ ượ ạ ư

$position = $chess_board[5][4];

• M ng đa chi u k t h pả ề ế ợ : khá h u ích trong PHP. Gi s b n mu n ghi l i các c p r u-th cữ ả ử ạ ố ạ ặ ượ ứ ăn, không ch lo i r u, mà c nhà s n xu t. B n có th th c hi n nh sau:ỉ ạ ượ ả ả ấ ạ ể ự ệ ư

$pairings["Martinelli"] ["zinfandel"] = "Broiled Veal Chops";$pairings["Beringer"] ["merlot"] = "Baked Ham";$pairings["Jarvis"] ["sauvignon"] = "Prime Rib";

6. Object : b n có th xem object nh là m t bi n mà minh ho m t ki u m u template đ c g i làạ ể ư ộ ế ạ ộ ể ẫ ượ ọ class. Khái ni m c a đ i t ng và l p đ c s d ng nhi u trong ngôn ng l p trình h ng đ iệ ủ ố ượ ớ ượ ử ụ ề ữ ậ ướ ố t ng OOP. Không gi ng nh các ki u d li u khác trong PHP, object ph i đ c khai báo.Đi uượ ố ư ể ữ ệ ả ượ ề quan tr ng là ph i nh n ra r ng object không h n gì m t minh ho c a m t l p, và ho t đ ng nhọ ả ậ ằ ơ ộ ạ ủ ộ ớ ạ ộ ư là m t khuôn m u cho vi c t o các object có các đ c tính và ch c năng c th . Cho nên, l p(class)ộ ẫ ệ ạ ặ ứ ụ ể ớ ph i đ c đ nh nghĩa tr c khi khai báo m t object. Đ kh i t o m t đ i t ng, b n s dung câuả ượ ị ướ ộ ể ở ạ ộ ố ượ ạ ử l nh ệ new đ minh ho đ i t ng v i m t bi n.Ví d :ể ạ ố ượ ớ ộ ế ụ

<?phpclass foo{

Page 4: Tai lieu huong_dan_ve_lap_trinh_php_7512

function do_foo(){ echo "Doing foo."; }}$bar = new foo;$bar->do_foo();?>

7. Resource : là m t bi n đ c bi t, ch a m t tham chi u đ n m t resource bên ngoài. Các resourceộ ế ặ ệ ứ ộ ế ế ộ đ c t o ra và s d ng b i các hàm đ c bi t.ượ ạ ử ụ ở ặ ệ Gi i phóng resourcesả : b i do tham chi u đ m c a h th ng đ c gi i thi u trong PHP4ở ế ế ủ ệ ố ượ ớ ệ Zend-engine, nó s t đ ng phát hi n khi m t resource không c n thi t cho lâu dài. Khi trongẽ ự ộ ệ ộ ầ ế ở tr ng h p này, t t c các resource mà đã đ c dùng cho resource này đ c gi i phóng b i "bườ ợ ấ ả ượ ượ ả ở ộ ph n thu nh t rác". Do đó, hi m khi th t s c n thi t đ gi i phóng b nh thông th ng b ngậ ặ ế ậ ự ầ ế ể ả ộ ớ ườ ằ cách s d ng hàm ử ụ free_result().

8. NULL : giá tr NULL đ c bi t dùng đ th hi n m t bi n không có giá tr . M t bi n đ c xem làị ặ ệ ể ể ệ ộ ế ị ộ ế ượ NULL n u:ế

o Nó đ c gán giá tr h ng s NULL.ượ ị ằ ốo Nó ch a đ c kh i t o giá tr nào.ư ượ ở ạ ịo Nó là hàm unset( )

Chú thích: unset () là m t hàm dùng đ h y b các bi n ch đ nh.ộ ể ủ ỏ ế ỉ ịCú pháp: ch có m t lo i giá tr c a ki u NULL. B n có th khai báo nh ví d sau: ỉ ộ ạ ị ủ ể ạ ể ư ụ$var=NULL;

IV.Bi n trong PHP:ế

Bi n trong PHP đ c th hi n b i d u dollar $ và theo sau là tên c a bi n. Tên bi n không phân bi tế ượ ể ệ ở ấ ủ ế ế ệ ch hoa hay ch th ng. Tên bi n ph i b t đ u b ng m t ch cái hay m t d u g ch n i_, theo sau là các chữ ữ ườ ế ả ắ ầ ằ ộ ữ ộ ấ ạ ố ữ cái, ch s hay là d u g ch n i. Ví d :ữ ố ấ ạ ố ụ

var = "Bob";$Var = "Joe";echo "$var, $Var";

Trong PHP3 thì các bi n ph i luôn luôn đ c gán giá tr . Còn trong PHP4 thì cung c p thêm m t cáchế ả ượ ị ấ ộ khác đ gán giá tr cho bi n: gán theo tham chi u. Đi u này có nghĩa là m t bi n m i có th tham chi u đ nể ị ế ế ề ộ ế ớ ể ế ế m t bi n nguyên thu . S thay đ i c a bi n m i s tác đ ng đ n bi n nguyên thu và ng c l i. Nó cũng cóộ ế ỷ ự ổ ủ ế ớ ẽ ộ ế ế ỷ ượ ạ nghĩa là không có sao chép, do đó vi c k t gán s di n ra nhanh h n. Đ th c hi n gán b ng tham chi u, chệ ế ẽ ễ ơ ể ự ệ ằ ế ỉ c n thêmầ & đ u tên c a bi n đ c gán.Ví d sau s in ra dòng 'My name is Bob' hai l n:ở ầ ủ ế ượ ụ ẽ ầ

<?php$foo = 'Bob'; // gán giá tr 'Bob' cho $fooị$bar = &$foo; // Tham chi u $foo qua $bar.ế$bar = "My name is $bar"; // thay đ i $bar...ổecho $bar;echo $foo; // $foo cũng b thay đ i.ị ổ?>

Ph m vi c a bi nạ ủ ế : Các bi n trong PHP có th là m t trong b n lo i ph m vi sau:ế ể ộ ố ạ ạ Bi n c c b .ế ụ ộ Tham s các hàm.ố Bi n toàn c c.ế ụ

Page 5: Tai lieu huong_dan_ve_lap_trinh_php_7512

Bi n static.ế

1) Bi n c c bế ụ ộ : M t bi n đ c khai báo trong m t hàm thì đ c xem nh là m t bi n c c bộ ế ượ ộ ượ ư ộ ế ụ ộ và nó ch đ c tham chi u trong hàm đó. B t k vi c gán giá tr bên ngoài hàm đ u xem nh là bi n hoànỉ ượ ế ấ ể ệ ị ề ư ế toàn khác v i bi n trong hàm đó. Chú ý khi thoát kh i hàm mà bi n c c b đ c khai báo, thì bi n và giá trớ ế ỏ ế ụ ộ ượ ế ị c a nó s b hu b . Bi n c c b có thu n l i b i nó lo i b nh ng kh năng c a các tác đ ng không dủ ẽ ị ỷ ỏ ế ụ ộ ậ ợ ở ạ ỏ ữ ả ủ ộ ự đoán đ c làm thay đ i k t qu t các bi n có th truy c p toàn c c.Ví d :ượ ổ ế ả ừ ế ể ậ ụ ụ

$x = 4;function assignx () {$x = 0;print "\$x inside function is $x. <br>";}assignx();print "\$x outside of function is $x. <br>";

Sau khi th c hi n s có các k t qu nh sau:ự ệ ẽ ế ả ư

$x inside function is 0.$x outside of function is 4.

2) Tham s c a hàmố ủ : cũng gi ng nh nhi u ngôn ng l p trình khác, trong PHP hàm có ch aố ư ề ữ ậ ứ tham s ph i khai báo các tham s trong ph n đ u c a hàm. M c d u, nh ng tham s này nh n các giá tr đ nố ả ố ầ ầ ủ ặ ầ ữ ố ậ ị ế t bên ngoài hàm, nh ng chúng s ch có th truy c p m t khi hàm t n t i. Các tham s c a hàm đ c khaiừ ư ẽ ỉ ể ậ ộ ồ ạ ố ủ ượ báo sau tên hàm và bên trong d u {. Ví d :ấ ụ

function x10 ($value) { $value = $value * 10; return $value;}

Đi u quan tr ng c n ph i chú ý là m c d u b n có th truy c p và thao tác v i các tham s trong hàmề ọ ầ ả ặ ầ ạ ể ậ ớ ố mà nó đ c khai báo, nh ng nó s b hu b khi hàm k t thúc th c hi n.ượ ư ẽ ị ỷ ỏ ế ự ệ

3) Bi n toàn c cế ụ : ng c l i v i bi n c c b , bi n toàn c c có th đ c truy c p t b t cượ ạ ớ ế ụ ộ ế ụ ể ượ ậ ừ ấ ứ ph n nào trong ch ng trình .Tuy nhiên, đ có th ch nh s a, bi n toàn c c ph i đ c khai báo toàn c c trongầ ươ ể ể ỉ ử ế ụ ả ượ ụ hàm mà nó đ c ch nh s a. Đ khai báo m t bi n là toàn c c ta đ t t khoá ượ ỉ ử ể ộ ế ụ ặ ừ GLOBAL phía tr c.Ví d :ở ướ ụ

$somevar = 15;function addit() { GLOBAL $somevar; $somevar++; print "Somevar is $somevar";}addit();

K t qu c a ế ả ủ $somevar là 16. Tuy nhiên, n u b n b dòng l nh ế ạ ỏ ệ GLOBAL $somevar; thì bi nế $somevar s ch có giá tr là 1, b i bi n ẽ ỉ ị ở ế $somevar đ c xem nh là bi n c c b trong hàm ượ ư ế ụ ộ addit( ).

M t cách khác đ khai báo m t bi n là toàn c c là s d ng m ng ộ ể ộ ế ụ ử ụ ả $GLOBALS c a PHP. Ví du, khaiủ báo bi n ế $somevar là toàn c c b ng cách s d ng m ng này:ụ ằ ử ụ ả

$somevar = 15;function addit() { $GLOBALS["somevar"]; $somevar++;}addit();

Page 6: Tai lieu huong_dan_ve_lap_trinh_php_7512

print "Somevar is $somevar";

4) Bi n staticế : t ng ph n v i các bi n đ c khai báo trong các tham s c a hàm s b hu bươ ả ớ ế ượ ố ủ ẽ ị ỷ ỏ khi thoát kh i hàm, bi n static s không m t giá tr c a nó khi thoát kh i hàm và s gi nguyên giá tr đó khiỏ ế ẽ ấ ị ủ ỏ ẽ ữ ị hàm đ c g i l i l n n a. B n có th khai báo m t bi n là static b ng cách dùng t khoá ượ ọ ạ ầ ữ ạ ể ộ ế ằ ừ STATIC đ t tr cặ ướ tên bi n.ếVí d : ụ

function keep_track() {STATIC $count = 0;$count++;print $count;print "<br>";}keep_track();keep_track();keep_track();

K t qu là :ế ả123

Truy c p bi n t trình duy t:ậ ế ừ ệKhi dùng PHP, cũng nh các ph n m m trung gian khác, thông tin đ c cung c p tuỳ ch n d a vàoư ầ ề ượ ấ ọ ự

tham chi u ng i dùng. Dĩ nhiên thông tin s đ n thông qua “form”. Thông tin cũng có th đ n t nh ng n iế ườ ẽ ế ể ế ừ ữ ơ khác, nh “cookie” hay “sessions”.ư

a.Bi n form:ếM t trong nh ng cách ph bi n là chuy n bi n thông qua “form”. M i thành ph n trong form c aộ ữ ổ ế ể ế ỗ ầ ủ

chúng ta s đ c gán tên và thu c tính giá tr . Khi form đ c “submit” thì name=value s đ c chuy n đ nẽ ượ ộ ị ượ ẽ ượ ể ế PHP. Chúng ta có th chuy n đ n PHP b i ph ng pháp GET ho c POST, tùy thu c chúng ta ch n gì trongể ể ế ở ươ ặ ộ ọ thu c tính hành đ ng c a “form”. M t khi form đ c “submit”, nh ng thành ph n c a form s t đ ng trộ ộ ủ ộ ượ ữ ầ ủ ẽ ự ộ ở thành nh ng bi n toàn c c trong PHP. ữ ế ụb.Sessions:

PHP cũng gi ng nh ASP và ColdFusion đ u h tr sessions. V y sessions là gì? V c b n nó làố ư ề ỗ ợ ậ ề ơ ả m t cách khác đ duy trì tr ng thái gi a các trang Web. Chúng ta b t đ u m t sessions b i hàm ộ ể ạ ữ ắ ầ ộ ở start_session(). Khi đó PHP s đăng ký m t session ID duy nh t và g i session ID đó v cho ng i dùng thông qua cookie.ẽ ộ ấ ử ề ườ PHP s t o nh ng t p đáp tr trên server đ có th l u gi d u v t c a b t kỳ bi n nào. Nh ng t p này cóẽ ạ ữ ệ ả ể ể ư ữ ấ ế ủ ấ ế ữ ệ cùng tên v i session ID.ớ

M t khi session đ c t o chúng ta có th đăng ký b t kỳ bi n s nào. Giá tr c a nó s đ c gi trênộ ượ ạ ể ấ ế ố ị ủ ẽ ượ ữ m t t p máy ch . Và nh v y trong th i gian s ng c a session nh ng bi n này s đ c th c hi n b i b tộ ệ ở ủ ư ậ ờ ố ủ ữ ế ẽ ượ ự ệ ở ấ c trang nào trong cùng m t tên mi n mà không c n truy c p đ n chúng.ứ ộ ề ầ ậ ế

Tuy nhiên có m t s ng i dùng không cho phép cookie, khi đó PHP gi d u v t các session ID quaộ ố ườ ữ ấ ế các querystring. Chúng ta có th làm đi u này b ng tay b ng cách cho sessiong ID ph thu c queryString, ho cể ề ằ ằ ụ ộ ặ thay đ i tuỳ ch n c u hình. Đ thêm session Id đ n querystring, ta dùng ổ ọ ấ ể ế <?=SID?>. Nó s t đ ng in ra m tẽ ự ộ ộ chu i nh sau: ỗ ư PHPSESSID=07e935k3kkjr0986s9d89fr9trg8rgrg20<a href=”mypage.php?<?=SID?>”>Click my Page</a>

Đo n mã sau s đăng ký m t session ID và gán cho nó giá tr là: ạ ẽ ộ ị hello world

<?phpsession_start();session_register(“my_var”);$my_var=”hello world”;?>

c.Cookies:

Page 7: Tai lieu huong_dan_ve_lap_trinh_php_7512

Cookies là m t m u thông tin nh đ c l u tr trên máy tính ng i dùng. M t cookies ch a m tộ ẩ ỏ ượ ư ữ ườ ộ ứ ộ đo n văn b n nh có th đ c b i máy ch Web. Cookies cung c p cách đ có th gi d u v t ng i s d ngạ ả ỏ ể ọ ở ủ ấ ể ể ữ ấ ế ườ ử ụ thông qua m t s d ch v . Chúng ta ph i nh r ng Web là môi tr ng tr ng thái. Máy ch Web s không bi tộ ố ị ụ ả ớ ằ ườ ạ ủ ẽ ế ai yêu c u thông tin, cookies s giúp chúng ta gi thông tin ng i dùng khi h di chuy n quanh site. Khi h t nầ ẽ ữ ườ ọ ể ọ ồ t i , cookies tr thành m t ph n c a yêu c u HTTP g i đ n cho máy ch Web. Nh ng tr c h t chúng ta c nạ ở ộ ầ ủ ầ ử ế ủ ữ ướ ế ầ thi t l p m t cookies. Nh ng ng i phát tri n s làm đi u này, gi ng nh m i th khác trong PHP, chúng r tế ậ ộ ữ ườ ể ẽ ề ố ư ọ ứ ấ đ n gi n. Dùng hàm setcookie() v i nh ng tham s theo sau:ơ ả ớ ữ ố

setcookie(name, value, time_to_expire, path, domain, security setting);Vi d :ụ

setcookie(“mycookie”, “my_id”, time()+ (60*60*24*30),”/”,”.mydomain.com”,0)Cookie này thi t l p nh ng tham s nh sau:ế ậ ữ ố ư

o L u tr tên bi n có tên là mycookie.ư ữ ếo Giá tr c a bi n là ị ủ ế my_id.o cookie có giá tr 30 ngày k t ngày thi t l p.ị ể ừ ế ậo cookie có hi u l c trong m i trang c a domain.ệ ự ọ ủo Nó có hi u l c trong m i ch c a t n mi n mydomain.comệ ự ọ ỗ ủ ề ềo Không có thi t l p an toàn đ c bi tế ậ ặ ệ

V.H ng s (Constant):ằ ố

H ng là m t giá tr không th ch nh s a đ c thông qua vi c th c hi n ch ng trình. B n có th đ nhằ ộ ị ể ỉ ử ượ ệ ự ệ ươ ạ ể ị nghĩa m t h ng b ng cách dùng hàm ộ ằ ằ define( ). M t khi h ng đ c đ nh nghĩa, nó không bao gi b thay đ i.ộ ằ ượ ị ờ ị ổ

Ch có các ki u d li u ỉ ể ữ ệ boolean, integer, float, string m i có th ch a các h ng. B n có th nh n giáớ ể ứ ằ ạ ể ậ tr c a m t h ng b ng cách đ n gi n ch đ nh tên c a nó. Không gi ng nh v i bi n, b n không c n khai báoị ủ ộ ằ ằ ơ ả ỉ ị ủ ố ư ớ ế ạ ầ $ tr c m t h ng. B n cũng có th dùng hàm ướ ộ ằ ạ ể constant(), đ đ c giá tr c a h ng. S d ng hàmể ọ ị ủ ằ ử ụ get_defined_constants( ) đ nh n m t danh sách t t c các hàm đã đ c đ nh nghĩa.ể ậ ộ ấ ả ượ ị

Các h ng đ c đ nh nghĩa tr c: PHP cung c p m t l ng l n các h ng đã đ c đ nh nghĩa tr c đằ ượ ị ướ ấ ộ ượ ớ ằ ượ ị ướ ể b t kỳ script nào cũng có th ch y đ c.ấ ể ạ ượ

VI. Toán tử:

Toán t là m t ký hi u ch đ nh m t ho t đ ng trong bi u th c.Các toán t có trong PHP nh sau:ử ộ ệ ỉ ị ộ ạ ộ ể ứ ử ư

Toán tử M c đíchụ( ) Th c hi n theo yêu c u có th t .ự ệ ầ ứ ựNew Minh ho m t object m i.ạ ộ ớ! ~ Phép Not trong Boolean, Not trong Bitwise.

++ -- T đ ng tăng, t đ ng gi mự ộ ự ộ ả@ Che d u l i.ấ ỗ

/ * % Chia, nhân, chia l y d .ấ ư+ - . C ng, tr , n i.ộ ừ ố<< >> D ch sang trái, d ch sang ph i trong Bitwise.ị ị ả

< <= > >= So sánh nh h n, nh h n hay b ng, l n h n, l n h n hayỏ ơ ỏ ơ ằ ớ ơ ớ ơ b ng.ằ

== != === <> So sánh b ng, không b ng, gi ng nhau, khác nhau.ằ ằ ố& ^ | Phép AND, OR, XOR trong Bitwise.&& || Phép AND, OR trong Boolean.?: Toán t tam phân.ử

= += *= /= .= Các toán t gán.ử%=&= |= ^=AND XOR OR Phép AND, XOR, OR trong Boolean.

Page 8: Tai lieu huong_dan_ve_lap_trinh_php_7512

Phan4VII.C u trúc đi u khi n:ấ ề ể

Các câu l nh đi u ki nệ ề ệ : các câu l nh này cho phép chúng ta phân bi t các kh i mã l nh mà s đ c th c thiệ ệ ố ệ ẽ ượ ự ch khi g p ph i các đi u ki n nào đó. PHP cung c p hai c u trúc l nh đi u ki n. Đ u tiên là ỉ ặ ả ệ ệ ấ ấ ệ ề ệ ầ if...elseif...else, cho phép chúng ta có th ki m tra m t s l ng các bi u th c và th c thi các câu l nh theo giá tr c a chúng.ể ể ộ ố ượ ể ứ ự ệ ị ủ N u chúng ta mong mu n ki m tra m t bi u th c đ n l v i m t s l ng các giá tr , PHP cũng cung c p m tế ố ể ộ ể ứ ơ ẻ ớ ộ ố ượ ị ấ ộ c u trúc ấ switch...case mà có th làm đ n gi n hoá đi phép toán này.ể ơ ả

1) Câu l nh Ifệ : Câu l nh If là m t trong nh ng đ c tính quan tr ng nh t c a m i ngôn ng l p trình. Nóệ ộ ữ ặ ọ ấ ủ ỗ ữ ậ cho phép th c thi ch n l a các dòng mã l nh ch khi tho mãn các đi u ki n c th .Ch ng h n: ự ọ ự ệ ỉ ả ề ệ ụ ể ẳ ạ

if ($country=="ca")echo ("Canada");//Canada đ c in ra khi bi n $country là caượ ế

N u nhi u h n m t câu l nh đ c th c hi n khi thoã mãn đi u ki n thì s d ng d u {} đ ch raế ề ơ ộ ệ ượ ự ệ ề ệ ử ụ ấ ể ỉ nh ng dòng l nh nào là n m trong kh i if:ữ ệ ằ ố

//Canada s ch đ c in n u bi n $country là caẽ ỉ ượ ế ếif ($country=="ca"){

echo("Canada");echo("Ottawa");

}

Đi u ki n đ c ki m tra trong d u {}ph i tr v giá tr Boolean, ho c là true ho c là false. Cũng nhề ệ ượ ể ấ ả ả ề ị ặ ặ ư b t kỳ đi u ki n nào mà không đ c thoã mãn, zero hay là chu i r ng (""), các giá tr không đ c đ nh nghĩaấ ề ệ ượ ỗ ỗ ị ượ ị thì t t c đ u tr v giá tr là false. Các đi u ki n có th đ c n i v i nhau b ng các toán t logic and (&&),ấ ả ề ả ề ị ề ệ ể ượ ố ớ ằ ử or(||) và xor.Ví d nh sau:ụ ư

if (((4 < 5) && (3 > 2)) xor (5 == 5)) echo ("This will not print");

Các đi u ki n phân nhánhề ệ : N u đi u ki n đ c ki m tra mà tr v false, thì PHP cho phép ta ch raế ề ệ ượ ể ả ề ỉ m t kh i l nh khác c n đ c th c hi n b ng cách dùng t khoá else. M i th trong kh i mã l nh th c thiộ ố ệ ầ ượ ự ệ ằ ừ ỗ ứ ố ệ ự đi u ki n này đ c xem nh là m t phân nhánh và m i nhánh ph i đ c đ nh v trong các d u ngo c n uề ệ ượ ư ộ ỗ ả ượ ị ị ấ ặ ế ch c nhi u h n m t dòng l nh.Ví d :ứ ề ơ ộ ệ ụ

if ($h < 0) {echo ("Negative");

} else {echo ("Positive");

}

PHP cũng cung c p t khoá ấ ừ elseif đ ki m tra các đi u ki n l a ch n n u đi u ki n trong câu l nh ifể ể ề ệ ự ọ ế ề ệ ệ là không đúng. M t s câu l nh ộ ố ệ elseif có th đ c s d ng v i câu l nh ể ượ ử ụ ớ ệ if. Nhánh else cu i cùng cho phépố chúng ta đ nh v đo n mã mà nên đ c th c hi n n u c đi u ki n ị ị ạ ượ ự ệ ế ả ề ệ if và elseif đ u không đúng.ề

if ($h < 0) {echo ("Negative");

} elseif ($h == 0) {echo ("Zero");

} else {echo ("Positive");

}

Page 9: Tai lieu huong_dan_ve_lap_trinh_php_7512

Ta cũng có th ki m tra nh ng đi u ki n hoàn toàn khác nhau khi s d ng elseif:ể ể ữ ề ệ ử ụif ($country == "ca") {

// do something ...} elseif ($position == "h") {

// do something else ...}

Chú ý: c hai đi u ki n trên đ u là true, nh ng ch có nhánh l nh th nh t là đ c th c hi n.ả ề ệ ề ư ỉ ệ ứ ấ ượ ự ệCũng có th s d ng các câu l nh if l ng nhau trong câu l nh if khác.Ví d :ể ử ụ ệ ồ ệ ụ

if ($country == "ca") {if ($position == "h") {

echo ("Human resources positions in Canada.");} elseif ($position == "a") {

echo ("Accounting positions in Canada.");}

}Các câu l nh trên cũng t ng t nh sau:ệ ươ ự ư

if ($country == "ca" && $position == "h") {echo ("Human resources positions in Canada.");

} elseif ($country == "ca" && $position == "a") {echo ("Accounting positions in Canada.");

}PHP cũng cung c p m t cú pháp l a ch n cho câu l nh if,đó là if....endif.Ví d :ấ ộ ự ọ ệ ụ

if ($country == "ca"):echo ("Canada");

elseif ($country == "cr"):echo ("Costa Rica");

else: echo ("the United States");

endif;

2) Câu l nh switchệ : đ c s d ng khi m t bi n riêng r đang đ c ki m tra so v i các giá tr khác.Víượ ử ụ ộ ế ẽ ượ ể ớ ị d :ụ

switch ($country) {case "ca":

echo ("Canada");break;

case "uk":echo ("the United Kingdom");break;

default: echo ("the United States");

}Khi câu l nh switch th c hi n ki m tra giá tr c a bi n ệ ự ệ ể ị ủ ế $country và so sánh nó v i m i m t trong cácớ ỗ ộ

giá tr trong các m nh đ ị ệ ề case. Khi m t giá tr thích h p đ c tìm th y, các câu l nh k t h p v i case đ cộ ị ợ ượ ấ ệ ế ợ ớ ượ th c hi n cho đ n khi g p câu l nh ự ệ ế ặ ệ break. Còn n u không tìm ra đ c giá tr thích h p nào thì câu l nhế ượ ị ợ ệ default s đ c th c hi n. Chú ý r ng l nh ẽ ượ ự ệ ằ ệ switch trong PHP thì linh ho t h n nhi u so v i h u h t các ngônạ ơ ề ớ ầ ế ng khác. Không gi ng nh C, Java và ngay c JavaScript, các giá tr ữ ố ư ả ị case cũng có th là m t trong các lo i vôể ộ ạ h ng, bao g m t t c các s ,các chu i và ngay c các bi n.Ví d :ướ ồ ấ ả ố ỗ ả ế ụ

$val = 6;$a = 5;$b = 6;switch ($val) {

case $a:echo ("five");break;

case $b:echo ("six");break;

default:echo ("$val");

}

Page 10: Tai lieu huong_dan_ve_lap_trinh_php_7512

Các m ng và các đ i t ng ch là nh ng lo i d li u là không ph i là nh ng nhãn đúng c a case trongả ố ượ ỉ ữ ạ ữ ệ ả ữ ủ PHP.

3). Vòng l p:ặ Các vòng l p chính là các ph ng ti n c a vi c th c thi m t kh i mã l nh trong m t sặ ươ ệ ủ ệ ự ộ ố ệ ộ ố l n cho tr c hay là cho đ n khi g p ph i m t đi u ki n nh t đ nh. PHP có hai lo i vòng l p: vòng l p ầ ướ ế ặ ả ộ ề ệ ấ ị ạ ặ ặ while ki m tra đi u ki n tr c hay là sau m i b c tính l p đi l p l i và th c hi n l p l i ch khi đi u ki n là đúng.ể ề ệ ướ ỗ ướ ặ ặ ạ ự ệ ặ ạ ỉ ề ệ M t ki u l p khác là ộ ể ặ for, trong tr ng h p này, s l ng b c tính l p đi l p l i đ c qui đ nh tr c khi l pườ ợ ố ượ ướ ặ ặ ạ ượ ị ướ ặ l n đ u và không th b thay đ i.ầ ầ ể ị ổ

1. Vòng l p whileặ : là câu l nh l p đ n gi n nh t. Cú pháp t ng t nh câu l nh if:ệ ặ ơ ả ấ ươ ự ư ệwhile (condition) {

//các câu l nhệ}

M t vòng l p ộ ặ while s ki m tra m t bi u th c Boolean. N u bi u th c là false thì đo n mã bên trongẽ ể ộ ể ứ ế ể ứ ạ d u ngo c móc s đ c b qua. Ng c l i, n u có giá tr true thì đo n mã bên trong d u ngo c móc s đ cấ ặ ẽ ượ ỏ ượ ạ ế ị ạ ấ ặ ẽ ượ th c hi n. Khi g p d u } thí đi u ki n ki m tra s đ c th c hi n l i và n u có giá tr là true thì đo n mãự ệ ặ ấ ề ệ ể ẽ ượ ự ệ ạ ế ị ạ trong vòng l p s đ c th c hi n l i. Đi u này s ti p t c cho đ n khi g p ph i đi u ki n . Chú ý r ng đi uặ ẽ ượ ự ệ ạ ề ẽ ế ụ ế ặ ả ề ệ ằ ề ki n ch đ c ki m tra m i khi b t đ u vòng l p, b i v y ngay khi s chính xác c a đi u ki n thay đ i trongệ ỉ ượ ể ỗ ắ ầ ặ ở ậ ự ủ ề ệ ổ su t đo n gi a c a kh i l nh ,thì mã l nh s v n đ c th c thi cho đ n h t. Đ thoát kh i vào th i đi mố ạ ữ ủ ố ệ ệ ẽ ẫ ượ ự ế ế ể ỏ ờ ể s m h n,ta có th s d ng l nh break. Ví d :ớ ơ ể ử ụ ệ ụ

$i = 11;while (--$i) {

if (my_function($i) == "error") {break; // d ng vòng l p!ừ ặ

}++$num_bikes;}

Trong ví d này, n u ta hình dung r ng hàm ụ ế ằ my_function không tr v b t kì l i nào thì vòng l p sả ề ấ ỗ ặ ẽ l p đi l p l i 10 l n và d ng l i khi bi n $i =0. Còn n u ặ ặ ạ ầ ừ ạ ế ế my_function tr v l i, thì câu l nh ả ề ỗ ệ break s đ cẽ ượ th c hi n và vòng l p s d ng l i. Có nhi u tr ng h p mà chúng ta mong mu n k t thúc ch khi s l p l iự ệ ặ ẽ ừ ạ ề ườ ợ ố ế ỉ ự ặ ạ hi n th i c a vòng l p không ph i là toàn b vòng l p c a chính nó. Đ đ t đ c đi u này, ta s d ng l nhệ ờ ủ ặ ả ộ ặ ủ ể ạ ượ ề ử ụ ệ continue.Ví d :ụ

$i = 11;while (--$i) {

if (my_function($i) == "error") {continue;

}++$num_bikes;}

Đo n mã này cũng l p đi l p l i 10 l n n u không có l i nào đ c tr v b i hàm my_function. Tuyạ ặ ặ ạ ầ ế ỗ ượ ả ề ở nhiên t i lúc này, n u có l i x y ra, vi c th c hi n s l t qua s l p l i k ti p c a vòng l p, mà không tăngạ ế ỗ ả ệ ự ệ ẽ ướ ự ặ ạ ế ế ủ ặ bi n đ m ế ế $num_bikes.Gi s bi n ả ử ế $i v n l n h n 0, vòng l p s ti p t c nh bình th ng.ẫ ớ ơ ặ ẽ ế ụ ư ườ

2. Vòng l p do...whileặ : vòng l p này cũng gi ng nh ặ ố ư while, ngo i tr đi u ki n đ c ki m traạ ừ ề ệ ượ ể t i cu i m i vòng l p, thay vì là đ u. Đi u này có nghĩa là vòng l p s luôn luôn th c hi n ít nh t m tạ ố ỗ ặ ở ầ ề ặ ẽ ự ệ ấ ộ l n. Ví d :ầ ụ

echo ("<SELECT name='num_parts'>\n");$i = 0;do {

echo ("\t<OPTION value=$i>$i</OPTION>\n");} while (++$i < $total_parts);echo ("</SELECT>\n");

V i đo n mã trên, giá tr zero luôn luôn xu t hi n nh là m t tùy ch n trong thành ph n ớ ạ ị ấ ệ ư ộ ọ ầ <SELECT>, ngay c n u bi n ả ế ế $total_parts=0.

Các câu l nh ệ while và do...while th ng đ c dùng v i các toán t tăng hay gi m đ đi u khi n khiườ ượ ớ ử ả ể ề ể nào thì b t đ u và d ng nh ví d trên. Các bi n th ng đ c dùng cho m c đích này đôi khi đ c đ nh nghĩaắ ầ ừ ư ụ ế ườ ượ ụ ượ ị

Page 11: Tai lieu huong_dan_ve_lap_trinh_php_7512

nh là các bi n đi u khi n vòng l p.Thông th ng s d ng các câu l nh ư ế ề ể ặ ườ ử ụ ệ while trong vi c đ c các records tệ ọ ừ m t truy v n c s d li u, t các dòng trong m t file hay là t các nhân t trong m t m ng.ộ ấ ơ ở ữ ệ ừ ộ ừ ố ộ ả

3. Vòng l p forặ : C u trúc c a vòng l pấ ủ ặ for là khá ph c t p h n m c d u các vòng l p ứ ạ ơ ặ ầ ặ for th ng ti n l i h n các vòng l p ườ ệ ợ ơ ặ while:

for ($i = 1; $i < 11; ++$i) {echo ("$i <BR> \n"); //In t 1 đ n 10ừ ế

}Câu l nh ệ for ch a ba bi u th c bên trong d u ngo c đ n c a nó, phân bi t v i nhau b i d u ch mứ ể ứ ấ ặ ơ ủ ệ ớ ở ấ ấ

ph y.Bi u th c th nh t là m t câu l nh gán đ kh i t o bi n đi u khi n vòng l p. Câu l nh này đ c th cẩ ể ứ ứ ấ ộ ệ ể ở ạ ế ề ể ặ ệ ượ ự thi ch m t l n tr c s l p l i l n đ u c a vòng l p.Bi u th c th hai là bi u th c Boolean mà đ c th c thiỉ ộ ầ ướ ự ặ ạ ầ ầ ủ ặ ể ứ ứ ể ứ ượ ự t i đ u m i l n l p. N u giá tr tr v là true thì vòng l p s ti p t c th c hi n. N u là false thì vòng l p k tạ ầ ỗ ầ ặ ế ị ả ề ặ ẽ ế ụ ự ệ ế ặ ế thúc. Bi u th c th ba là m t câu l nh mà th c thi t i giai đo n cu i c a m i l n l p c a vòng l p. Nóể ứ ứ ộ ệ ự ạ ạ ố ủ ỗ ầ ặ ủ ặ th ng đ c dùng đ tăng hay gi m các bi n đi u khi n vòng l p .ườ ượ ể ả ế ề ể ặ

VIII.Hàm:

Đây là m t trong nh ng thu n l i nh t trong phát tri n ng d ng. Các hàm cho phép b n phát tri n vi c sộ ữ ậ ợ ấ ể ứ ụ ạ ể ệ ử d ng l i và d dàng ch nh s a các thành ph n mà th t s h u ích khi b n phát tri n các ng d ng Web t ngụ ạ ễ ỉ ử ầ ậ ự ữ ạ ể ứ ụ ươ t nh trong quan ni m và ti n ích. Các k t qu c a hàm r t ng n g n, d hi u và d đ c.ự ư ệ ệ ế ả ủ ấ ắ ọ ễ ể ễ ọ

V y hàm là gì?ậ Hàm là m t đo n các mã l nh v i m t m c đích c th và ph i đ c gán m t tên duyộ ạ ệ ớ ộ ụ ụ ể ả ượ ộ nh t. Tên hàm có th đ c g i t i b t kỳ đâu trong ch ng trình, cho phép các đo n mã th hi n b i tên c aấ ể ượ ọ ạ ấ ươ ạ ể ệ ở ủ nó đ c th c hi n l p l i khi c n thi t. Đây là m t thu n l i b i cùng m t đo n mã l nh ch đ c vi t m tượ ự ệ ặ ạ ầ ế ộ ậ ợ ở ộ ạ ệ ỉ ượ ế ộ l n nh ng có th đ c ch nh s a d dàng khi c n thi t.ầ ư ể ượ ỉ ử ễ ầ ế

T o m t hàm PHP là m t quá trình đ n gi n. B n có th t o m t hàm t i b t kỳ n i nào trong ch ngạ ộ ộ ơ ả ạ ể ạ ộ ạ ấ ơ ươ trình PHP. Tuy nhiên, cho m c đích t ch c b n có th th y r ng s thu n l i khi đ t t t c các hàm đ cụ ổ ứ ạ ể ấ ằ ự ậ ợ ặ ấ ả ượ d đ nh s s d ng trong script t i đ u m i file script. M t ph ng th c khác cho vi c t ch c hàm mà có thự ị ẽ ử ụ ạ ầ ỗ ộ ươ ứ ệ ổ ứ ể gi m đi s d th a đáng k và tăng vi c s d ng l i là đ t các hàm trong nh ng file riêng r ( đ c xem nhả ự ư ừ ể ệ ử ụ ạ ặ ữ ẽ ượ ư là m t th vi n). Đi u này là thu n l i b i b n có th dùng các hàm l p đi l p l i trong nh ng ng d ng khácộ ư ệ ề ậ ợ ở ạ ể ặ ặ ạ ữ ứ ụ nhau mà không t o ra các vi c copy d th a và do đó gi m b t các nguy c gây l i do vi c vi t l i.ạ ệ ư ừ ả ớ ơ ỗ ệ ế ạ

M t hàm th ng bao g m ba ph n phân bi t:ộ ườ ồ ầ ệ• Tên c a hàm.ủ• C p d u ngo c ( ) ch a các tham s tuỳ ch n nh p vào.ặ ấ ặ ứ ố ọ ậ• Ph n thân c a hàm,n m trong c p d u { }.ầ ủ ằ ặ ấ

Ví d khai báo m t hàm sau: ụ ộfunction display_copyright($site_name) {

print "Copyright &copy 2000 $site_name. All Rights Reserved.";}

Các hàm l ng nhauồ : Các hàm có th l ng nhau. Đi u này th t s h u ích cho các ch ng trình l n vàể ồ ề ậ ự ữ ươ ớ nh , khi nó thêm vào m t m c đ modul hoá khác vào trong ng d ng, k t qu s tăng lên đáng k trong vi cỏ ộ ứ ộ ứ ụ ế ả ẽ ể ệ qu n lý mã.ả Quay l i v i ví d ạ ớ ụ display_copyright trên, b n có th gi i h n nhu c u ch nh s a ngày tháng cùngở ạ ể ớ ạ ầ ỉ ử v i vi c dùng m t hàm l ng đ nh nghĩa tr c c a PHP trong hàm ớ ệ ộ ồ ị ướ ủ display_copyright():

function display_copyright($site_name) {print "Copyright &copy". date("Y"). " $site_name. All Rights Reserved.";}B n cũng có th l ng các khai báo hàm trong m t hàm khác. Tuy nhiên, vi c l ng m t khai báo hàmạ ể ồ ộ ệ ồ ộ

không ng ý r ng nó s đ c b o v trong ph m vi gi i h n mà nó đ c khai báo. H n th n a, m t hàmụ ằ ẽ ượ ả ệ ạ ớ ạ ượ ơ ế ữ ộ đ c l ng vào không th a k các tham s nh p vào c a "cha m " nó, các tham s ph i đ c chuy n sang hàmượ ồ ừ ế ố ậ ủ ẹ ố ả ượ ể đ c l ng ch khi chúng đ c chuy n sang hàm khác. Tuy nhiên, vi c l ng các khai báo hàm là th t s h u íchượ ồ ỉ ượ ể ệ ồ ậ ự ữ cho các lý do qu n lý mã và đ m b o s rõ ràng c a t ch c mã.ả ả ả ự ủ ổ ứVí d :ụ

function display_footer($site_name) {

Page 12: Tai lieu huong_dan_ve_lap_trinh_php_7512

function display_copyright($site_name) {print "Copyright &copy ". date("Y"). " $site_name. All Rights Reserved.";

}print "<center><a href = \"\">home</a> | <a href = \"\">recipes</a> | <a href =\"\">events</a><br><a href = \"\">tutorials</a> | <a href = \"\">about</a> | <a href =\"\">contact us</a><br>";display_copyright($site_name);print "</center>";}$site_name = "PHP Recipes";display_footer($site_name);

Sau khi th c hi n,đo n script trên s cho k t qu nh sau:ự ệ ạ ẽ ế ả ư

home | recipes | eventstutorials | about | contact us

Các hàm l ng nhau trong PHP không đ c b o v b i vi c đ c g i t b t kỳ đo n script nào trongồ ượ ả ệ ở ệ ượ ọ ừ ấ ạ ch ng trình, nh ng chúng không th đ c g i l i cho đ n sau khi các hàm cha m đ c g i. Vi c g i thươ ư ể ượ ọ ạ ế ẹ ượ ọ ệ ọ ử m t hàm l ng tr c khi g i hàm cha m c a nó s sinh ra m t thông báo l i.ộ ồ ướ ọ ẹ ủ ẽ ộ ỗ

Các giá tr tr v t m t hàm:ị ả ề ừ ộ Vi c tr v m t giá tr t hàm là r t h u ích, nó đ c th c hi n b ngệ ả ề ộ ị ừ ấ ữ ượ ự ệ ằ cách gán giá tr g i hàm cho m t bi n. B t kỳ ki u d li u nào cũng đ c tr v t m t hàm bao g m c ki uị ọ ộ ế ấ ể ữ ệ ượ ả ề ừ ộ ồ ả ể m ng và danh sách.ả

Ví dụ: xây d ng m t hàm tính thu bán hàngự ộ ế$price = 24.99;$tax = .06;function calculate_cost($tax, $price) {

$sales_tax = $tax;return $price + ($price * $sales_tax);

}// chú ý cách calculate_cost() tr l i m t giá trả ạ ộ ị$total_cost = calculate_cost ($tax, $price);// làm tròn bi n $total_cost có 2 d u ch m th p phân.ế ấ ấ ậ$total_cost = round($total_cost, 2);print "Total cost: ".$total_cost;// $total_cost = 26.49

Hàm đ quy:ệ Ho t đ ng c a m t hàm g i l i b n thân chính nó nhi u l n đ tho mãn m t vài phépạ ộ ủ ộ ọ ạ ả ề ầ ể ả ộ toán th t s là m t s c m nh. N u đ c s d ng m t cách đúng đ n, các vi c g i hàm đ quy có th ti tậ ự ộ ứ ạ ế ượ ử ụ ộ ắ ệ ọ ệ ể ế ki m đ c kho ng tr ng không đáng và d th a trong m t script và đ c bi t h u ích cho vi c th c hi n cácệ ượ ả ố ư ừ ộ ặ ệ ữ ệ ự ệ th t c l p đi l p l i.ủ ụ ặ ặ ạ

Ví d s d ng m t hàm l p đ quy đ tính m t t p h p các s integer.ụ ử ụ ộ ặ ệ ể ộ ậ ợ ốfunction summation ($count) {if ($count != 0) :return $count + summation($count− 1);endif;}$sum = summation(10);print "Summation = $sum";

K t qu c a đo n mã trên s là ế ả ủ ạ ẽ Summation=55S d ng hàm đ quy có th c i thi n t c đ trong m t ch ng trình n u hàm đ c g i đ th ngử ụ ệ ể ả ệ ố ộ ộ ươ ế ượ ọ ủ ườ

xuyên.Tuy nhiên,ph i c n th n khi vi t các th t c đ quy ,n u mã không đúng s d n đ n vi c l p khôngả ẩ ậ ế ủ ụ ệ ế ẽ ẫ ế ệ ặ d ng đ c.ừ ượ

Các hàm có th thay đ i:ể ổ Kh năng thú v c a PHP là có th th c hi n các hàm có th bi n đ i đ c.ả ị ủ ể ự ệ ể ế ổ ượ M t hàm có kh năng thay đ i là m t l i g i "đ ng" đ n hàm mà tên c a nó đ c xác đ nh t i th i đi m th cộ ả ổ ộ ờ ọ ộ ế ủ ượ ị ạ ờ ể ự

Page 13: Tai lieu huong_dan_ve_lap_trinh_php_7512

thi. M c d u không th t s c n thi t trong h u h t các ng d ng Web, nh ng các hàm có th thay đ i có thặ ầ ậ ự ầ ế ầ ế ứ ụ ư ể ổ ể gi m kích th c mã và đ ph c t p m t cách đáng k , thông th ng lo i b các câu l nh đi u ki n if khôngả ướ ộ ứ ạ ộ ể ườ ạ ỏ ệ ề ệ c n thi t.ầ ế

Ta có th g i hàm có th thay đ i đ c b ng cách g i tên m t bi n theo sau là t p các d u ngo cể ọ ể ổ ượ ằ ọ ộ ế ậ ấ ặ đ n( ). Trong d u ngo c đ n đó là t p các tham s tuỳ ch n nh p vào. Hình th c thông th ng c a m t hàmơ ấ ặ ơ ậ ố ọ ậ ứ ườ ủ ộ có th thay đ i nh sau: ể ổ ư $function_name();

Ví dụ :s d ng hàm có th thay đ i đ xác đ nh các bi n nh p vào.ử ụ ể ổ ể ị ế ậ//thông đi p chào ti ng Italiaệ ếfunction italian() {print "Benvenuti al PHP Recipes.";}// thông đi p chào ti ng Anhệ ếfunction english() {print "Welcome to PHP Recipes.";}// gán ngôn ng dùng là ti ng Italiaữ ế$language = "italian";//th c thi hàm có th thay đ i đ c.ự ể ổ ượ$language();

Xây d ng các th vi n hàmự ư ệ : Các th vi n hàm là m t trong nh ng cách h u ích đ ti t ki m th i gianư ệ ộ ữ ữ ể ế ệ ờ khi xây d ng các ng d ng. Ví d , b n có th vi t m t lo t các hàm cho vi c s p x p các m ng. B n có thự ứ ụ ụ ạ ể ế ộ ạ ệ ắ ế ả ạ ể s d ng l i các hàm này trong các ng d ng khác nhau. H n là vi c th ng xuyên vi t l i hay copy và dán cácử ụ ạ ứ ụ ơ ệ ườ ế ạ hàm này vào các script m i, nó th t s ti n l i khi đ t t t c các hàm liên quan đ n vi c s p x p trong cùngớ ậ ự ệ ợ ặ ấ ả ế ệ ắ ế m t file phân bi t. File này s ch a các tiêu đ d dàng nh n ra,ch ng h n nh ộ ệ ẽ ứ ề ễ ậ ẳ ạ ư array_sorting.inc. Ví d nhụ ư sau:

<?// file: array_sorting.inc// purpose:th vi n ch a các hàm dùng cho vi c s p x pư ệ ứ ệ ắ ếfunction merge_sort($array, $tmparray, $right, $left) {. . .}function bubble_sort($array, $n) {. . .}function quick_sort($array, $right, $left) {. . .}?>

Hàm th vi n ư ệ array_sorting.inc này s ho t đ ng nh là m t ch ch a cho t t c các hàm s p x pẽ ạ ộ ư ộ ỗ ứ ấ ả ắ ế m ng. Đi u này th t s h u ích b i b n có th t ch c các hàm m t cách hi u qu theo m c đích cho phépả ề ậ ự ữ ở ạ ể ổ ứ ộ ệ ả ụ d dàng tìm ki m khi c n thi t. M t khi b n xây d ng cho chính mình m t th vi n hàm, b n có th s d ngễ ế ầ ế ộ ạ ự ộ ư ệ ạ ể ử ụ các câu l nh ệ include() và require() c a PHP đ ch a toàn b các file th vi n vào trong m t script do đó làmủ ể ứ ộ ư ệ ộ cho t t c các hàm đ u có s n. Cú pháp chung c a hai câu l nh này nh sau:ấ ả ề ẵ ủ ệ ư

include(path/filename);require(path/filename);

hay cũng có th nh sau:ể ưinclude "path/filename";require "path/filename";

"path":đ ng d n tuy t đ i hay t ng đ i c a filename.ườ ẫ ệ ố ươ ố ủGi s b n mu n dùng th vi n ả ử ạ ố ư ệ array_sorting.inc trong m t script.B n có th d dàng th c hi nộ ạ ể ễ ự ệ

nh sau:ưinclude ("array_sorting.inc");

Bây gi thì b n có th d dàng s d ng b t kỳ hàm nào trong array_sorting.incờ ạ ể ễ ử ụ ấ$some_array = (50, 42, 35, 46);

//s d ng ph ng pháp s p x p bubble_sort( )ử ụ ươ ắ ế$sorted_array = bubble_sort($some_array, 1);

IX.Classes và Objects

Page 14: Tai lieu huong_dan_ve_lap_trinh_php_7512

1. Class: là m t t p h p các bi n và các hàm cùng làm vi c v i các bi n này. M t class đ c đ nhộ ậ ợ ế ệ ớ ế ộ ượ ị nghĩa theo cú pháp sau:

<?phpclass Cart{ var $items; // Items in our shopping cart function add_item ($artnr, $num) { $this->items[$artnr] += $num; } function remove_item ($artnr, $num) { if ($this->items[$artnr] > $num) { $this->items[$artnr] -= $num; return true; } else { return false; } }}?>

Ví d trên đ nh nghĩa m t class có tên là Cart, ch a các m ng k t h p c a các article trong m t cart vàụ ị ộ ứ ả ế ợ ủ ộ hai hàm dùng đ thêm và b các th ra kh i cart này.ể ỏ ứ ỏ

Chú ý: trong PHP 4, ch có các h ng đ c kh i t o cho các bi n ỉ ằ ượ ở ạ ế var m i đ c cho phép Đ kh i t oớ ượ ể ở ạ các bi n v i các giá tr không ph i là h ng s , b n c n có m t hàm kh i t o đ c g i m t cách t đ ng khiế ớ ị ả ằ ố ạ ầ ộ ở ạ ượ ọ ộ ự ộ object đ c d ng t l p. Ch ng h n nh hàm đ c g i trong m t hàm d ng nh sau:ượ ự ừ ớ ẳ ạ ư ượ ọ ộ ự ư

<?phpclass Cart{ var $todays_date = date("Y-m-d"); var $name = $firstname; var $owner = 'Fred ' . 'Jones'; var $items = array("VCR", "TV");}class Cart{ var $todays_date; var $name; var $owner; var $items; function Cart() { $this->todays_date = date("Y-m-d"); $this->name = $GLOBALS['firstname']; /* etc. . . */ }}?>

2. extends : th ng thì b n c n các l p v i các bi n và các hàm t ng t cho m t l p t n t i khác.ườ ạ ầ ớ ớ ế ươ ự ộ ớ ồ ạ Th c t , r t t t khi b n đ nh nghĩa m t l p chung mà đ c s d ng trong các đ án c a b n và ch nh s a l pự ế ấ ố ạ ị ộ ớ ượ ử ụ ồ ủ ạ ỉ ử ớ này cho thích nghi v i nhu c u c a m i đ án. Đ th c hi n đi u này, các ớ ầ ủ ỗ ồ ể ự ệ ề class có th đ c m r ng t cácể ượ ở ộ ừ class khác.Vi c m r ng hay d n xu t m t l p có t t c các bi n và các hàm c a l p cha ( đi u này đ c xemệ ở ộ ẫ ấ ộ ớ ấ ả ế ủ ớ ề ượ là th a k ) và nh ng gì b n thêm vào trong đ nh nghĩa m r ng. Không gi ng nh các ngôn ng l p trìnhừ ế ữ ạ ị ở ộ ố ư ữ ậ

Page 15: Tai lieu huong_dan_ve_lap_trinh_php_7512

h ng đ i t ng khác, PHP không h tr đa th a k , cho nên m t l p m r ng ch luôn luôn ph thu c vàoướ ố ượ ỗ ợ ừ ế ộ ớ ở ộ ỉ ụ ộ m t l p cha riêng r c a nó. Các l p đ c m r ng s s d ng t khoá ộ ớ ẻ ủ ớ ượ ở ộ ẽ ử ụ ừ extends. Ví d :ụ

class Named_Cart extends Cart{ var $owner; function set_owner ($name){ $this->owner = $name; }}

Ví d trên đ nh nghĩa m t l p ụ ị ộ ớ Named_Cart mà có t t c các bi n và các hàm c a l p Cart thêm vàấ ả ế ủ ớ c ng thêm các bi n ộ ế $owener và hàm set_owner().

3. Hàm d ngự : là nh ng hàm trong m t l p mà đ c t đ ng g i khi b n t o ra m t minh ho m iữ ộ ớ ượ ự ộ ọ ạ ạ ộ ạ ớ c a m t l p v i t khoá ủ ộ ớ ớ ừ new. Trong PHP4, m t l p đ c xem là hàm d ng khi nó có cùng tên v i tên l p màộ ớ ượ ự ớ ớ nó đ c đ nh nghĩa trong đó.Ví d :ượ ị ụ

class Auto_Cart extends Cart{ function Auto_Cart() { $this->add_item ("10", 1); }}

Ví d trên đ nh nghĩa m t l p ụ ị ộ ớ Auto_Cart mà m t Cart có m t hàm d ng kh i t o m i khi m tộ ộ ự ở ạ ỗ ộ Auto_Cart m i đ c g i b ng t khoá ớ ượ ọ ằ ừ new.

Các hàm d ng có th có các đ i s và các đ i s này có th là tuỳ ch n. Đ s d ng l p mà không cóự ể ố ố ố ố ể ọ ể ử ụ ớ tham s , t t c các tham s đ n hàm d ng nên là tuỳ ch n b ng cách cung c p các giá tr m c đ nh. Ví d nhố ấ ả ố ế ự ọ ằ ấ ị ặ ị ụ ư sau:

class Constructor_Cart extends Car{ function Constructor_Cart($item = "10", $num = 1){ $this->add_item ($item, $num); }}// Shop the same old boring stuff.$default_cart = new Constructor_Cart;// Shop for real...$different_cart = new Constructor_Cart("20", 17);

Chú ý: trong PHP4 khi m t l p không có hàm d ng thì hàm d ng c a l p cha s đ c g i n u nó t nộ ớ ự ự ủ ớ ẽ ượ ọ ế ồ t i.Ví d :ạ ụ

class A{ function A(){ echo "I am the constructor of A.<br>\n"; } function B() { echo "I am a regular function named B in class A.<br>\n"; echo "I am not a constructor in A.<br>\n"; }}class B extends A{ function C() { echo "I am a regular function.<br>\n"; }}// g i B() nh là m t hàm d ngọ ư ộ ự$b = new B;

Page 16: Tai lieu huong_dan_ve_lap_trinh_php_7512
Page 17: Tai lieu huong_dan_ve_lap_trinh_php_7512

GIỚI THIỆU VỀ HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU MYSQL

I. T i sao l i s d ng MySQL?ạ ạ ử ụ

N u b n đang tìm ki m m t h th ng qu n lý c s d li u mi n phí hay là không đ t ti n, m t vàiế ạ ế ộ ệ ố ả ơ ở ữ ệ ễ ắ ề ộ th có s n đ b n ch n nh : MySQL, mSQL, Postgres. Khi b n so sánh MySQL v i các h th ng c s dứ ẵ ể ạ ọ ư ạ ớ ệ ố ơ ở ữ li u khác, hãy nghĩ v nh ng gì quan tr ng nh t đ i v i b n. S th c thi, s h tr , các đ c tính, các đi uệ ề ữ ọ ấ ố ớ ạ ự ự ự ỗ ợ ặ ề ki n và các gi i h n c a b n quy n, giá c c a t t c các nhân t đ có th th c hi n. V i nh ng lí do đó,ệ ớ ạ ủ ả ề ả ủ ấ ả ố ể ể ự ệ ớ ữ MySQL có nhi u đ c đi m cu n hút:ề ặ ể ố

• T c đố ộ : MySQL r t nhanh. Nh ng nhà phát tri n cho r ng MySQL là c s d li u nhanh nh tấ ữ ể ằ ơ ở ữ ệ ấ mà b n có th có.ạ ể

• D s d ngễ ử ụ : MySQL tuy có tính năng cao nh ng th c s là m t h th ng c s d li u r t đ nư ự ự ộ ệ ố ơ ở ữ ệ ấ ơ gi n và ít ph c t p khi cài đ t và qu n tr h n các h th ng l n .ả ứ ạ ặ ả ị ơ ệ ố ớ

• Giá thành : MySQL là mi n phí cho h u h t các vi c s d ng trong m t t ch c.ễ ầ ế ệ ử ụ ộ ổ ứ• H tr ngôn ng truy v nỗ ợ ữ ấ : MySQL hi u SQL, là ngôn ng c a s ch n l a cho t t c các hể ữ ủ ự ọ ự ấ ả ệ

th ng c s d li u hi n đ i. B n cũng có th truy c p MySQL b ng cách s d ng các ng d ng mà h trố ơ ở ữ ệ ệ ạ ạ ể ậ ằ ử ụ ứ ụ ỗ ợ ODBC (Open Database Connectivity -m t giao th c giao ti p c s d li u đ c phát tri n b i Microsoft).ộ ứ ế ơ ở ữ ệ ượ ể ở

• Năng l cự : Nhi u client có th truy c p đ n server trong cùng m t th i gian. Các client có th sề ể ậ ế ộ ờ ể ử d ng nhi u c s d li u m t cách đ ng th i. B n có th truy c p MySQL t ng tác v i s d ng m t vàiụ ề ơ ở ữ ệ ộ ồ ờ ạ ể ậ ươ ớ ử ụ ộ giao di n đ b n có th đ a vào các truy v n và xem các k t qu : các dòng yêu c u c a khách hàng, các trìnhệ ể ạ ể ư ấ ế ả ầ ủ duy t Web...ệ

• K t n i và b o m tế ố ả ậ : MySQL đ c n i m ng m t cách đ y đ , các c s d li u có th đ cượ ố ạ ộ ầ ủ ơ ở ữ ệ ể ượ truy c p t b t kỳ n i nào trên Internet do đó b n có th chia s d li u c a b n v i b t kỳ ai, b t kỳ n iậ ừ ấ ơ ạ ể ẽ ữ ệ ủ ạ ớ ấ ấ ơ nào. Nh ng MySQL ki m soát quy n truy c p cho nên ng i mà không nên nhìn th y d li u c a b n thìư ể ề ậ ườ ấ ữ ệ ủ ạ không th nhìn đ c.ể ượ

• Tính linh đ ngộ : MySQL ch y trên nhi u h th ng UNIX cũng nh không ph i UNIX ch ngạ ề ệ ố ư ả ẳ h n nh Windows hay OS/2. MySQL ch y đ c các v i m i ph n c ng t các máy PC nhà cho đ n cácạ ư ạ ượ ớ ọ ầ ứ ừ ở ế máy server.

• S phân ph i r ngự ố ộ : MySQL r t d dàng đ t đ c, ch c n s d ng trình duy t web c a b n.ấ ễ ạ ượ ỉ ầ ử ụ ệ ủ ạ N u b n không hi u làm th nào mà nó làm vi c hay tò mò v thu t toán, b n có th l y mã ngu n và tìm tòiế ạ ể ế ệ ề ậ ạ ể ấ ồ nó. N u b n không thích m t vài cái, b n có th thay đ i nó.ế ạ ộ ạ ể ổ

• S h trự ỗ ợ : B n có th tìm th y các tài nguyên có s n mà MySQL h tr . C ng đ ng MySQLạ ể ấ ẵ ỗ ợ ộ ồ r t có trách nhi m. H tr l i các câu h i trên mailing list th ng ch trong vài phút. Khi l i đ c phát hi n,ấ ệ ọ ả ờ ỏ ườ ỉ ỗ ượ ệ các nhà phát tri n s đ a ra cách kh c ph c trong vài ngày, th m chí có khi trong vài gi và cách kh c ph cể ẽ ư ắ ụ ậ ờ ắ ụ đó s ngay l p t c có s n trên Internet.ẽ ậ ứ ẵ

II. T o c s d li u và ng i dùng:ạ ơ ở ữ ệ ườ

C s d li u MySQL có th h tr cho nhi u c s d li u khác.Thông th ng b n s có m t c s d li uơ ở ữ ệ ể ỗ ợ ề ơ ở ữ ệ ườ ạ ẽ ộ ơ ở ữ ệ cho m i ng d ng.ỗ ứ ụT o c s d li u:ạ ơ ở ữ ệ Đây là ph n d nh t. T i d u nh c c a dòng l nh MySQL, đánh :ầ ễ ấ ạ ấ ắ ủ ệ

mysql> creat database dbname;dbname: chính là tên c a c s d li u b n mu n t o.ủ ơ ở ữ ệ ạ ố ạ

Page 18: Tai lieu huong_dan_ve_lap_trinh_php_7512

Khi b n th y m t ph n h i gi ng nh sau: Query OK,1 row affected (0.06 sec). Đi u này ch ng tạ ấ ộ ả ồ ố ư ề ứ ỏ b n đã thành công trong vi c t o c s d li u, n u không có ph n h i thì b n xem l i đã đánh ; cu i dòngạ ệ ạ ơ ở ữ ệ ế ả ồ ạ ạ ở ố ch a. D u ; b o MySQL r ng b n đã hoàn thành và yêu c u nó hãy th c hi n chính xác câu l nh.ư ấ ả ằ ạ ầ ự ệ ệCác ng i dùng và các quy n:ườ ề M t h th ng MySQL có nhi u ng i dùng, vì lí do b o m t cho nên v i m iộ ệ ố ề ườ ả ậ ớ ỗ ng i dùng c a h th ng c n ph i có m t account và password. Đi u này không có nghĩa là b n ph i b tườ ủ ệ ố ầ ả ộ ề ạ ả ắ bu c ph i t o ra password cho ng i dùng, nh ng đi u nên làm là cung c p các password cho t t c nh ngộ ả ạ ườ ư ề ấ ấ ả ữ ng i dùng mà b n đã t o ra.ườ ạ ạCác quy n h th ng c a MySQL:ề ệ ố ủ M t trong nh ng đ c tính t t nh t c a MySQL là nó h tr t t c cácộ ữ ặ ố ấ ủ ỗ ợ ấ ả quy n ph c t p c a h th ng. Khi b n t o ra m t ng i dùng trong MySQL, b n trao quy n cho ng i đó đề ứ ạ ủ ệ ố ạ ạ ộ ườ ạ ề ườ ể đ nh rõ nh ng gì ng i đó có th và không th đ i v i h th ng.ị ữ ườ ể ể ố ớ ệ ốT o ng i dùng:ạ ườ s d ng l nh ử ụ ệ GRANT

Các l nh ệ GRANT và REVOKE đ c dùng đ trao và l y quy n đ n ng i dùng MySQL v i b nượ ể ấ ề ế ườ ớ ố c p b c phân quy n nh sau:ấ ậ ề ư Global, Database, Table, Column

L nh ệ GRANT: đ t o ng i dùng và giao quy n cho h .C u trúc nh sau:ể ạ ườ ề ọ ấ ưGRANT privileges [columns]ON itemTO user_name [IDENTIFIED By 'password'][WITH GRANT OPTION]

L nh ệ REVOKE: trái ng c v i ượ ớ GRANT.Nó dùng đ thu h i l i các quy n c a ng i dùng, và có c uể ồ ạ ề ủ ườ ấ trúc t ng t nh ươ ự ư GRANT

REVOKE privileges [(columns)]ON itemFROM user_name

T o b ng c s d li uạ ả ơ ở ữ ệ : s d ng l nh ử ụ ệ CREAT TABLE, cú pháp thông th ng là:ườCREAT TABLE tablename(columns)

Ví d , t o m t b ng customers nh sau:ụ ạ ộ ả ưcreate table customers(customerid int unsigned not null auto_increment primary key,name char(30) not null,address char(40) not null,city char(20) not null);

Xem d li u v i l nh ữ ệ ớ ệ SHOW và DESCRIBE : Sau khi đăng nh p vào màn hình MySQL, b n có th xem cácậ ạ ể b ng trong c s d li u b ng cách đánh vào nh sau:ả ơ ở ữ ệ ằ ư

mysql> show tables;Thì MySQL s hi n th t t c các b ng trong c s d li u.ẽ ể ị ấ ả ả ơ ở ữ ệB n cũng có th s d ng ạ ể ử ụ show đ xem danh sách các c s d li u b ng cách đánh vào nh sau:ể ơ ở ữ ệ ằ ư

mysql>show databases;Đ xem thêm các chi ti t v m t b ng c th b n s d ng l nh ể ế ề ộ ả ụ ể ạ ử ụ ệ DESCRIBE:mysql> describe tablename;

II. Làm vi c v i c s d li u MySQL:ệ ớ ơ ở ữ ệ

SQL (Structured Query Language): Đây là ngôn ng chu n nh t cho vi c truy c p h th ng qu n lý c sữ ẩ ấ ệ ậ ệ ố ả ơ ở d li u quan h . SQL dùng đ ch a và truy xu t d li u t m t c s d li u. Nó th ng đ c dùng trongữ ệ ệ ể ứ ấ ữ ệ ừ ộ ơ ở ữ ệ ườ ượ các h th ng c s d li u nh MySQL, Oracle, Sybase, PostgreSQL và Microsoft SQL Server...ệ ố ơ ỡ ữ ệ ưChèn d li u vào trong c s d li u:ữ ệ ơ ở ữ ệ Tr c khi b n có th làm nhi u vi c v i c s d li u, b n c n ch aướ ạ ể ề ệ ớ ơ ở ữ ệ ạ ầ ứ m t ít d li u trong nó. Đ th c hi n đ c đi u này b n có th s d ng câu l nh SQL ộ ữ ệ ở ể ự ệ ượ ề ạ ể ử ụ ệ INSERT. Cú pháp nh sau:ư

INSERT [INTO] table [(column1,column2,column3,...)]VALUES(value1,value2,value3,...);

Ví d , chèn m t b n ghi vào trong b ng Customers, b n th c hi n nh sau:ụ ộ ả ả ạ ự ệ ư

Page 19: Tai lieu huong_dan_ve_lap_trinh_php_7512

insert into customers values(NULL,"le bao vy","phan chau trinh","DH Ky Thuat");

Truy xu t d li u t c s d li u:ấ ữ ệ ừ ơ ở ữ ệ S d ng câu l nh ử ụ ệ SELECT đ truy xu t d li u t m t c s d li uể ấ ữ ệ ừ ộ ơ ở ữ ệ b ng cách ch n các hàng tho mãn đi u ki n c th nào đó t m t b ng. Có r t nhi u tuỳ ch n và cách khácằ ọ ả ề ệ ụ ể ừ ộ ả ấ ề ọ nhau đ s d ng l nh ể ử ụ ệ SELECT.

Câu l nh căn b n c a ệ ả ủ SELECT là:SELECT itemsFROM tables[WHERE condition][GROUP BY group_type][HAVING where_definition][ORDER BY order_type][LIMIT limit_criteria];

Truy xu t d li u v i đi u ki n c th :ấ ữ ệ ớ ề ệ ụ ể Đ có th truy c p m t t p h p con c a các hàng trong m t b ng,ể ể ậ ộ ậ ợ ủ ộ ả chúng ta c n ph i xác đ nh m t vài đi u ki n có ch n l a. B n có th làm đ c đi u này v i m nh đầ ả ị ộ ề ệ ọ ự ạ ể ượ ề ớ ệ ề WHERE.Ví d :ụ

select *from orderswhere customerid=3;

Đi u này đ ng nghĩa v i vi c l a ch n t t c các c t t b ng orders, nh ng ch có nh ng dòng mà cóề ồ ớ ệ ự ọ ấ ả ộ ừ ả ư ỉ ữ customerid=3 thì m i tho mãn.ớ ả

Truy xu t d li u t nhi u b ng:ấ ữ ệ ừ ề ả Thông th ng đ tr l i m t câu h i t c s d li u, b n có th c n ph iườ ể ả ờ ộ ỏ ừ ơ ở ữ ệ ạ ể ầ ả dùng d li u t nhi u h n m t b ng. Đ k t h p các thông tin này l i v i nhau trong SQL, b n ph i th cữ ệ ừ ề ơ ộ ả ể ế ợ ạ ớ ạ ả ự hi n m t phép toán g i là k t h p(join). Có nghĩa là nó s k t h p hai hay nhi u b ng l i v i nhau theo cácệ ộ ọ ế ợ ẽ ế ợ ề ả ạ ớ m i quan h gi a các d li u.ố ệ ữ ữ ệ

Ví d n i hai b ng đ n gi n sau:ụ ố ả ơ ảselect orders.orderid,orders.amount,orders.date from customers,orderswhere customers.name='le bao vy' and customers.customerid=orders.customerid;

K t n i nhi u h n hai b ng:ế ố ề ơ ả Ph c t p h n k t n i hai b ng l i v i nhau.Theo lu t thông th ng, b n c n n iứ ạ ơ ế ố ả ạ ớ ậ ườ ạ ầ ố các b ng t ng c p v i nhau v i các đi u ki n n i.Ví d nh sau:ả ừ ặ ớ ớ ề ệ ố ụ ư

select customers.namefrom customers,orders,order_items where customers.customerid=orders.customeridand orders.orderid=order_items.orderidand order_items.isbn=books.isbnand books.title like '%Java%';

S d ng tên khác cho b ng (tên hi u-alias):ử ụ ả ệ Thông th ng chúng ta truy c p đ n tên c a các b ng b ng cácườ ậ ế ủ ả ằ tên hi u c a chúng. B n có th t o ra các tên hi u này khi b t đ u câu truy v n và sau đó s d ng thông quaệ ủ ạ ể ạ ệ ắ ầ ấ ử ụ chúng.Ví d :ụ

select c.namefrom customers as c,orders as o,order_items as oi,books as bwhere c.customerid=o.customeridand o.orderid=oi.orderidand oi.isbn=b.isbn

Page 20: Tai lieu huong_dan_ve_lap_trinh_php_7512

and b.title like '%java%'; Nh khi b n khai báo các b ng chúng ta s dùng, chúng ta thêm m t m nh đ ư ạ ả ẽ ộ ệ ề AS đ khai báo các tênể

hi u cho b ng. Chúng ta cũng có th dùng các tên hi u cho các c t. Vi c này th t s c n thi t khi chúng taệ ả ể ệ ộ ệ ậ ự ầ ế mu n k t n i m t b ng v i chính b n thân nó. Đi u này nghe có v h i khó nghe, nh ng nó th t s là h uố ế ố ộ ả ớ ả ề ẻ ơ ư ậ ự ữ ích, ch ng h n n u chúng ta mu n tìm các hàng trong cùng m t b ng mà có cùng giá tr , n u chúng ta mu nẳ ạ ế ố ộ ả ị ế ố tìm các khách hàng s ng trong cùng m t thành ph , chúng ta có th đ t các tên khác nhau cho cùng m t b ngố ộ ố ể ặ ộ ả Customers.Ví d :ụ

select c1.name,c2.name,c1.cityfrom customers as c1,customers as c2where c1.city=c2.cityand c1.name!=c2.name;

Nh ng gì mà chúng ta làm là gi v nh b ng Customers là hai b ng khác nhau c1 và c2, sau đó th cữ ả ờ ư ả ả ự hi n vi c k t n i trên c t City.ệ ệ ế ố ộ

Truy xu t d li u theo th th yêu c u:ấ ữ ệ ứ ự ầ Khi b n mu n hi n th các hàng đ c truy xu t b ng m t truy v nạ ố ể ị ượ ấ ằ ộ ấ theo m t th th yêu c u, b n có th s d ng m nh đ ộ ứ ự ầ ạ ể ử ụ ệ ề ORDER BY c a câu l nh ủ ệ SELECT. M nh đ này sệ ề ẽ s p x p các hàng c a m t hay nhi u c t đ c li t kê trong m nh đ ắ ế ủ ộ ề ộ ượ ệ ệ ề SELECT. Ví d :ụ

select name,addressfrom customersorder by name;

Giá tr yêu c u m c đ nh là tăng d n và b n có th ch rõ nó n u b n thích dùng t khoá ị ầ ặ ị ầ ạ ể ỉ ế ạ ừ ASC.Ví d :ụ

select name,addressfrom customersorder by name asc;

Còn n u mu n s p x p gi m d n thì dùng t khoá ế ố ắ ế ả ầ ừ DESC.Nhóm và k t h p d li u:ế ợ ữ ệ Các hàm k t n i có th đ c áp d ng đ n m t b ng cũng nh đ n toàn b hay đ nế ố ể ượ ụ ế ộ ả ư ế ộ ế các nhóm d li u trong m t b ng là:ữ ệ ộ ả

Tên Mô tả

AVG(column) Giá tr trung bình c a các giá tr trong các c t c th .ị ủ ị ộ ụ ể

COUNT(items)

N u b n ch ra m t c t thì nó tr v s các giá tr c a c t đó.N u thêmế ạ ỉ ộ ộ ả ề ố ị ủ ộ ế vào t khoá DISTINCT phía tr c tên c t,thì tr v các giá tr riêng bi từ ướ ộ ả ề ị ệ c a c t đó.Còn n u ch đ nh là COUNT(*),nó s đ m t t c các giá trủ ộ ế ỉ ị ẽ ế ấ ả ị trong hàng b t k giá tr r ng.ấ ể ị ỗ

MIN(column) Các giá tr nh nh t trong c t ch đ nh.ị ỏ ấ ộ ỉ ịMAX(column) Các giá tr l n nh t trong c t ch đ nh.ị ớ ấ ộ ỉ ịSTD(column) Đ chênh l ch chu n c a các giá tr trong c t ch đ nh.ộ ệ ẩ ủ ị ộ ỉ ị

STDDEV(column) T ng t nh ươ ự ư STD(column).SUM(column) T ng các giá tr trong c t ch đ nh.ổ ị ộ ỉ ị

Ch n hàng nào s đ c quay tr v :ọ ẽ ượ ả ề M t m nh đ c a câu l nh ộ ệ ề ủ ệ SELECT mà có th đ c s d ng m t cáchể ượ ử ụ ộ đ c bi t trong các ng d ng Web đó là m nh đ ặ ệ ứ ụ ệ ề LIMIT. Nó đ c dùng đ ch đ nh các dòng nào t nh p vàoượ ể ỉ ị ừ ậ nên đ c tr l i. Nó g m có hai tham s : s hàng đ b t đ u và s l ng các hàng s đ c tr l i.Ví dượ ả ạ ồ ố ố ể ắ ầ ố ượ ẽ ượ ả ạ ụ minh ho :ạ

select namefrom customerslimit 2,3;

Page 21: Tai lieu huong_dan_ve_lap_trinh_php_7512

Câu truy v n này có th đ c hi u nh sau: ch n tên t b ng customers và sau đó tr l i 3 hàng b tấ ể ượ ể ư ọ ừ ả ả ạ ắ đ u t hàng th hai c a nh p vào.ầ ừ ứ ủ ậ

C p nh t các b n ghi trong c s d li u:ậ ậ ả ơ ở ữ ệ S d ng câu l nh ử ụ ệ UPDATE. C u trúc thông d ng c a nó nh sau:ấ ụ ủ ư

UPDATE tablenameSET column1=expression1,column2=expression2,...[WHERE condition][LIMIT number]

Ví d , chúng ta mu n tăng giá t t c các quy n sách lên 10%, chúng ta s s d ng câu l nh UPDATEụ ố ấ ả ể ẽ ử ụ ệ nh sau:ư

update booksset price=price*1.1;

Thay đ i các b ng sau khi t o:ổ ả ạ Chúng ta có th thay đ i c u trúc c a các b ng trong c s d li u b ng cáchể ổ ấ ủ ả ơ ở ữ ệ ằ s d ng câu l nh ử ụ ệ ALTER TABLE. C u trúc căn b n c a nó nh sau:ấ ả ủ ư

ALTER TABLE tablename alteration [,alteration...]

Ví d : trong b ng Customers, chúng ta cho phép tên dài 30 kí t , sau khi chúng ta b t đ u t o m t sụ ả ự ắ ầ ạ ộ ố d li u, chúng ta có th phát hi n r ng m t s tên là quá dài và đang b c t, chúng ta có th s a đi u này b ngữ ệ ể ệ ằ ộ ố ị ắ ể ử ề ằ cách thay đ i lo i d li u c a c t đ nó có th dài đ n 45 kí t .ổ ạ ữ ệ ủ ộ ể ể ế ự

alter table customersmodify name char(45) not null;

Hu b các records kh i c s d li u:ỷ ỏ ỏ ơ ở ữ ệ S d ng câu l nh ử ụ ệ DELETE, c u trúc nh sau:ấ ư

DELETE FROM table[WHERE condition]

Ví d :ụdelete from customerswhere customerid=5;

Chú ý:n u b n vi t ế ạ ế DELETE FROM table; thì t t c các hàng trong b ng s b hu b .ấ ả ả ẽ ị ỷ ỏHu các b ng:ỷ ả B n có th hu toàn b m t b ng b ng cách s d ng câu l nh ạ ể ỷ ộ ộ ả ằ ử ụ ệ DROP TABLE. C u trúc nàyấ r t đ n gi n, nó nh sau:ấ ơ ả ư

DROP TABLE table;

Hu toàn b c s d li u:ỷ ộ ơ ở ữ ệ B n có th th c hi n đi u này b ng cách s d ng câu l nh ạ ể ự ệ ề ằ ử ụ ệ DROP DATABASE, c u trúc nh sau:ấ ư

DROP DATABASE database;

T o và hu Index:ạ ỷ Index là nh ng ph ng ti n quan tr ng đ tăng t c đ truy c p các n i dung c a các b ng,ữ ươ ệ ọ ể ố ộ ậ ộ ủ ả thông th ng là dùng cho các câu truy v n mà liên quan đ n k t n i nhi u b ng v i nhau. MySQL cho phépườ ấ ế ế ố ề ả ớ b n t o ra index m t cách khá linh ho t. B n có th index các c t riêng r hay k t n i các c t l i v i nhau.ạ ạ ộ ạ ạ ể ộ ẽ ế ố ộ ạ ớ B n cũng có th có nhi u h n m t index trong m t b ng n u b n mu n có th tra c u giá tr m t cách nhanhạ ể ề ơ ộ ộ ả ế ạ ố ể ứ ị ộ chóng t các c t khác nhau c a m t b ng.ừ ộ ủ ộ ảT o Index:ạ B n có th t o index cho m t b ng m i khi b n dùng ạ ể ạ ộ ả ớ ạ CREAT TABLE, ho c có th thêm indexặ ể cho các b ng đang t n t i v i ả ồ ạ ớ CREAT INDEX hay ALTER TABLE. B n ph i ch đ nh r ng index có th hayạ ả ỉ ị ằ ể không th ch a giá tr l p l i. N u nó không th , index nên đ c t o nh là m t khoá chính (ể ứ ị ặ ạ ế ể ượ ạ ư ộ PRIMARY

Page 22: Tai lieu huong_dan_ve_lap_trinh_php_7512

KEY) hay là m t index duy nh t ộ ấ (UNIQUE INDEX). Đ thêm m t index cho m t b ng đang t n t i, b n cóể ộ ộ ả ồ ạ ạ th s d ng ể ử ụ ALTER TABLE hay CREAT INDEX. Trong đó l nh ệ ALTER TABLE linh ho t h n b i b n cóạ ơ ở ạ th s d ng nó đ t o ra m t index thông th ng, m t index duy nh t, hay m t khoá chính. Cú pháp nh sau:ể ử ụ ể ạ ộ ườ ộ ấ ộ ư

alter table tablename add index indexname(column_list)alter table tablename add unique indexname(column_list)alter table tablename add primary key(column_list)

CREAT INDEX có th thêm m t index thông th ng hay m t index duy nh t cho m t b ng:ể ộ ườ ộ ấ ộ ả

creat unique index index_name on tablename(column_list)creat index index_name on tablename(column_list)

Đ t o m t index cho m t b ng m i khi b n s d ng câu l nh ể ạ ộ ộ ả ớ ạ ử ụ ệ CREAT TABLE, b n có th s d ngạ ể ử ụ cú pháp t ng t nh đã làm v i ươ ự ư ớ ALTER TABLE, nh ng b n ph i ch đ nh các m nh đ t o index trongư ạ ả ỉ ị ệ ề ạ ph n câu l nh ầ ệ CREAT TABLE. C th nh sau:ụ ể ư

creat table tablename(......index index_name(column_list),unique index_name(column_list),primary key (column_list),...)

H y b Index:ủ ỏ B n có th hu b index b ng cách s d ng m t trong hai câu l nh ạ ể ỷ ỏ ằ ử ụ ộ ệ DROP INDEX hay ALTER TABLE. Cú pháp nh sau:ư

DROP INDEX index_name on table_nameALTER TABLE table_name DROP INDEX index_nameALTER TABLE table_name DROP PRIMARY KEY

Chú ý:Index có th b tác đ ng n u b n hu các c t trong m t b ng.ể ị ộ ế ạ ỷ ộ ộ ả

III. Các hàm PHP s d ng đ truy c p c s d li u MySQLử ụ ể ậ ơ ở ữ ệ

• int mysql_affected_rows( [resource link_identifier]): tr v s l ng các hàng b tác đ ng b i các câu truyả ề ố ượ ị ộ ở v n cu i cùng ấ ố INSERT, UPDATE hay DELETE k t h p v i đ nh danh liên k t ế ợ ớ ị ế (link_identifier). N u nh nế ậ d ng liên k t không c th thì liên k t cu i cùng đ c m ra b i ạ ế ụ ể ế ố ượ ở ở mysql_connect( ). Chú ý khi b n đang sạ ử d ng các giao d ch, b n ph i g i ụ ị ạ ả ọ mysql_affected_rows( ) sau truy v n ấ INSERT, UPDATE hay DELETE.

• int mysql_character_set_name ( [resource link_identifier]):tr v ký t m c đ nh gán tên cho k t n i hi nả ề ự ặ ị ế ố ệ hành.

• bool mysql_close ( [resource link_identifier]): tr v ả ề TRUE n u thành công, FALSE n u th t b i. Hàmế ế ấ ạ này đóng k t n i đ n MySQL server mà k t h p v i nh n d ng liên k t đ nh rõ, n u ế ố ế ế ợ ớ ậ ạ ế ị ế link_identifier không đ nh rõ thì liên k t m cu i cùng s đ c s d ng. Vi c s d ng hàm này không ph i lúc nào cũng c nị ế ở ố ẽ ượ ử ụ ệ ử ụ ả ầ thi t, nh đ i v i các liên k t m không liên t c thì nó s t đ ng đóng khi k t thúc s th c thi c a script.ế ư ố ớ ế ở ụ ẽ ự ộ ế ự ự ủ Chú ý hàm này không đóng k t n i liên t c đ c t o b i hàm ế ố ụ ượ ạ ở mysql_pconnect( ).•resource mysql_connect ( [string server [, string username [, string password [, bool new_link]]]]): tr vả ề

m t đ nh danh liên k t MySQL khi thành công, còn không tr v giá tr ộ ị ế ả ề ị FALSE. Hàm này thi t l p m t k t n iế ậ ộ ế ố đ n MySQL server. Nh ng giá tr m c đ nh sau đ c dùng cho các tham s tùy ch n không khai báo:ế ữ ị ặ ị ượ ố ọ server='localhost:3306', username=tên c a ng i s d ng là ch c a server và ủ ườ ử ụ ủ ủ password= b tr ng. N u l iỏ ố ế ờ g i l n th hai đ c t o b i ọ ầ ứ ượ ạ ở mysql_connect( ) v i cùng các tham s mà không có liên k t m i nào đ c thi tớ ố ế ớ ượ ế l p,nh ng thay vào đó m t liên k t đ nh danh c a c ng đang đ c m s đ c tr v . Tham s ậ ư ộ ế ị ủ ổ ượ ở ẽ ượ ả ề ố new_link mô

Page 23: Tai lieu huong_dan_ve_lap_trinh_php_7512

t hành vi này và làm cho hàm ả mysql_connect( ) luôn m m t liên k t m i, ngay c khi n u hàmở ộ ế ớ ả ế mysql_connect( ) b g i tr c v i cùng các tham s . Liên k t đ n server s b đóng ngay khi vi c th c thi c aị ọ ướ ớ ố ế ế ẽ ị ệ ự ủ script k t thúc,tr khi nó b đóng s m h n b i hàm g i ế ừ ị ớ ơ ở ọ mysql_close( ).

•bool mysql_create_db ( string database name [, resource link_identifier]): t o m t c s d li u m i trênạ ộ ơ ở ữ ệ ớ server k t h p v i liên k t đ nh danh đ c ch đ nh. Tr v giá tr ế ợ ớ ế ị ượ ỉ ị ả ề ị TRUE n u thành công, ng c l i tr vế ượ ạ ả ề FALSE.

•bool mysql_data_seek ( resource result_identifier, int row_number): di chuy n con tr hàng bên trong c aể ỏ ủ k t qu MySQL k t h p v i k t qu đ nh danh c th đ ch đ n s hàng đ c ch đ nh. Nó s tr v ế ả ế ợ ớ ế ả ị ụ ể ể ỉ ế ố ượ ỉ ị ẽ ả ề TRUE n u thành công, ng c l i tr v ế ượ ạ ả ề FALSE.Row_number b t đ u t i ắ ầ ạ 0, và nên có giá tr trong kho ng t ị ả ừ 0 đ nế mysql_num_rows - 1.

•string mysql_db_name ( resource result, int row [, mixed field]): l y tham s đ u tiên là con tr k t qu tấ ố ầ ỏ ế ả ừ vi c g i hàm ệ ọ mysql_list_dbs( ). Tham s hàng là ch m c đ n k t qu gán. N u x y ra l i, thì tr vố ỉ ụ ế ế ả ế ả ỗ ả ề FALSE.S d ng hàm ử ụ mysql_errono( ) và mysql_error( ) đ xem b n ch t l i.ể ả ấ ỗ

•resource mysql_db_query ( string database, string query [, resource link_identifier]): ch n m t c s dọ ộ ơ ở ữ li u và th c thi m t truy v n trên nó. N u liên k t đ nh danh tùy ch n không đ c ch đ nh hàm s c tìm raệ ự ộ ấ ế ế ị ọ ượ ỉ ị ẽ ố m t liên k t m đ n MySQL server và n u không có liên k t nào đ c tìm th y thì nó s t o ra m t liên k tộ ế ở ế ế ế ượ ấ ẽ ạ ộ ế nh n u hàm ư ế mysql_connect( ) đã đ c g i không có tham s nào. Hàm s tr v m t k t qu MySQLượ ọ ố ẽ ả ề ộ ế ả d ng, hay là ươ FALSE n u b l i.ế ị ỗ

•bool mysql_drop_db ( string database_name [, resource link_identifier]): hu b toàn b c s d li u tỷ ỏ ộ ơ ở ữ ệ ừ server k t h p v i liên k t đ nh danh ch đ nh. Tr v ế ợ ớ ế ị ỉ ị ả ề TRUE n u thành công, ế FALSE n u g p l i. ế ặ ỗ

•int mysql_errno ( [resource link_identifier]): tr v s l i t hàm MySQL cu i cùng, hay là ả ề ố ỗ ừ ố 0 n u không cóế l i nào.ỗ

•string mysql_error ( [resource link_identifier]): tr v văn b n l i t hàm MySQL cu i cùng hay ' ' n uả ề ả ỗ ừ ố ế không có l i nào.ỗ

•string mysql_escape_string ( string unescaped_string): tránh unescaped_string đ nó có th n i an toànể ể ở ơ trong mysql_querry( ).

•array mysql_fetch_array ( resource result [, int result_type]): tr v m t m ng t ng đ ng v i hàng tìmả ề ộ ả ươ ươ ớ n p, hay là ạ FALSE n u không có hàng nào.ế

•array mysql_fetch_assoc ( resource result): tr v m t m ng k t h p t ng đ ng v i hàng tìm n p, hayả ề ộ ả ế ợ ươ ươ ớ ạ là FALSE n u không có hàng nào.ế

•object mysql_fetch_field ( resource result [, int field_offset]): tr v m t đ i t ng ch a thông tin cácả ề ộ ố ươ ứ tr ng. Nó th ng đ c dùng đ l y thông tin v các tr ng trong m t k t qu truy v n.ườ ườ ượ ể ấ ề ườ ộ ế ả ấ

•array mysql_fetch_lengths ( resource result): tr v m t m ng t ng đ ng v i chi u dài c a m i tr ngả ề ộ ả ươ ươ ớ ề ủ ỗ ườ trong hàng cu i cùng đ c tìm n p b i ố ượ ạ ở mysql_fetch_row() hay tr v ả ề FALSE n u l i.ế ỗ

•object mysql_fetch_object ( resource result): tr v m t đ i t ng v i các thu c tính t ng đ ng v iả ề ộ ố ượ ớ ộ ươ ươ ớ hàng tìm n p hay ạ FALSE n u không có hàng nào.ế

•array mysql_fetch_row ( resource result): tr v m t m ng t ng đ ng v i hàng tìm n p, n u không cóả ề ộ ả ươ ươ ớ ạ ế hàng nào thì tr v ả ề FALSE.

•string mysql_field_flags ( resource result, int field_offset): tr v tr ng các c c a tr ng đ c ch đ nh.ả ề ườ ờ ủ ườ ượ ỉ ị•int mysql_field_len ( resource result, int field_offset): tr v chi u dài c a tr ng đ c ch đ nh.ả ề ề ủ ườ ượ ỉ ị•string mysql_field_name ( resource result, int field_index): tr v tên c a tr ng ch m c đ c ch đ nh.ả ề ủ ườ ỉ ụ ượ ỉ ị•int mysql_field_seek ( resource result, int field_offset): tìm ki m offset c a tr ng đ c ch đ nh.ế ủ ườ ượ ỉ ị•string mysql_field_table ( resource result, int field_offset): tr v tên c a b ng mà tr ng đ c ch đ nh ả ề ủ ả ườ ượ ỉ ị ở

trong đó.•string mysql_field_type ( resource result, int field_offset): tr v lo i c a tr ng đ c ch đ nh .ả ề ạ ủ ườ ượ ỉ ị•bool mysql_free_result ( resource result): gi i phóng t t c b nh k t h p v i đ nh danh k t qu ả ấ ả ộ ớ ế ợ ớ ị ế ả result.

Hàm này ch đ c g i khi b n quan tâm đ n bao nhiêu b nh đang đ c s d ng cho các câu truy v n màỉ ượ ọ ạ ế ộ ớ ượ ử ụ ấ tr v các t p h p l n các k t qu . T t c k t qu b nh k t h p s t đ ng đ c gi i phóng khi script k tả ề ậ ợ ớ ế ả ấ ả ế ả ộ ớ ế ợ ẽ ự ộ ượ ả ế thúc th c hi n. Tr v ự ệ ả ề TRUE n u thành công, ế FALSE n u th t b i.ế ấ ạ

•string mysql_get_client_info ( void): tr v chu i bi u th phiên b n th vi n c a client.ả ề ỗ ể ị ả ư ệ ủ

Page 24: Tai lieu huong_dan_ve_lap_trinh_php_7512

•string mysql_get_host_info ( [resource link_identifier]): tr v chu i mô t lo i k t n i đ c dùng cho k tả ề ỗ ả ạ ế ố ượ ế n i ố link_indentifier,bao g m c tên c a server host. N u ồ ả ủ ế link_indentifier b b qua, thì k t n i đ c m cu iị ỏ ế ố ượ ở ố cùng s đ c s d ng.ẽ ượ ử ụ

•int mysql_get_proto_info ( [resource link_identifier]): tr v phiên b n giao th c đ c dùng b i k t n iả ề ả ứ ượ ở ế ố link_identifier. N u ế link_identifier b b qua, k t n i m cu i cùng s đ c dùng.ị ỏ ế ố ở ố ẽ ượ

•string mysql_get_server_info ( [resource link_identifier]): tr v phiên b n c a server đ c dùng b i k tả ề ả ủ ượ ở ế n i ố link_identifier, n u ế link_identifier b b qua, k t n i đ c m cu i cùng s đ c s d ng.ị ỏ ế ố ượ ở ố ẽ ượ ử ụ

•string mysql_info ( [resource link_identifier]): tr v thông tin chi ti t v truy v n cu i cùng s d ngả ề ế ề ấ ố ử ụ link_identifier.N u ế link_identifier không đ c ch đ nh, liên k t cu i cùng đ c m s đ c th a nh n.ượ ỉ ị ế ố ượ ở ẽ ượ ừ ậ

•int mysql_insert_id ( [resource link_identifier]): tr v ID đ c t o cho b i c t ả ề ượ ạ ở ộ AUTO_INCREMENT b iở câu l nh truy v n ệ ấ INSERT tr c đó s d ng ướ ử ụ link_identifier đ c cho. N u ượ ế link_identifier không đ c ch đ nh,ượ ỉ ị liên k t m cu i cùng s đ c th a nh n.ế ở ố ẽ ượ ừ ậ

•resource mysql_list_dbs ( [resource link_identifier]): tr v con tr k t qu ch a các c s d li u có s nả ề ỏ ế ả ứ ơ ở ữ ệ ẵ t daemon mysql hi n hành.ừ ệ

•resource mysql_list_fields ( string database_name, string table_name [, resource link_identifier]): truy xu tấ thông tin v tên các b ng cho tr c. Các tham s là tên các c s d li u hay tên các b ng.ề ả ướ ố ơ ở ữ ệ ả

•resource mysql_list_processes ( [resource link_identifier]): tr v con tr k t qu mô t các lu ng hi nả ề ỏ ế ả ả ồ ệ hành c a server.ủ

•resource mysql_list_tables ( string database [, resource link_identifier]): l y tên c s d li u và tr v conấ ơ ở ữ ệ ả ề tr k t qu .ỏ ế ả

•int mysql_num_fields ( resource result): tr v s l ng các tr ng trong t p h p k t qu .ả ề ố ượ ườ ậ ợ ế ả•int mysql_num_rows ( resource result): tr v s l ng các hàng trong t p h p k t qu . Hàm này ch đúngả ề ố ượ ậ ợ ế ả ỉ

cho các câu l nh ệ SELECT.•resource mysql_pconnect ( [string server [, string username [, string password]]]): thi t l p k t n i đ nế ậ ế ố ế

MySQL server.•bool mysql_ping ( [resource link_identifier]): ki m tra k t n i đ n server có làm vi c hay không. N u nóể ế ố ế ệ ế

không làm vi c thì m t k t l i t đ ng th c hi n. Hàm này có th đ c dùng b i các script mà gi nguyênệ ộ ế ạ ự ộ ự ệ ể ượ ở ữ tr ng thái nhàn r i trong m t lúc đ ki m tra xem server có đóng k t n i và k t n i l i n u c n thi t hayạ ỗ ộ ể ể ế ố ế ố ạ ế ầ ế không. Hàm này s tr v ẽ ả ề TRUE n u k t n i đ n server đang làm vi c n u không thì tr v ế ế ố ế ệ ế ả ề FALSE.

•resource mysql_query ( string query [, resource link_identifier [, int result_mode]]): g i m t truy v n đ nở ộ ấ ế c s d li u hi n hành đang ho t đ ng trên server mà k t h p v i đ nh danh liên k t đ c ch đ nh. N uơ ở ữ ệ ệ ạ ộ ế ợ ớ ị ế ượ ỉ ị ế link_identifier không đ c ch đ nh, liên k t m cu i cùng s đ c th a nh n. N u không có liên k t nàoượ ỉ ị ế ở ố ẽ ượ ừ ậ ế ế đ c m , hàm s c thi t l p m t liên k t n u ượ ở ẽ ố ế ậ ộ ế ế mysql_connect( ) đã đ c g i không có tham s nào và dùngượ ọ ố nó.

•string mysql_real_escape_string ( string unescaped_string [, resource link_identifier]): tránh đ c các kí tượ ự đ c bi t trong ặ ệ unescaped_string, tr v t p h p kí t hi n hành c a k t n i.ả ề ậ ợ ự ệ ủ ế ố

•mixed mysql_result ( resource result, int row [, mixed field]): tr v n i dung c a m t cell t t p h p k tả ề ộ ủ ộ ừ ậ ợ ế qu MySQL. Tham s tr ng có th là offset c a tr ng hay là tên tr ng hay là tên b ng c a tr ng.tênả ố ườ ể ủ ườ ườ ả ủ ườ tr ng. N u tên c t có tên hi u thì s d ng tên hi u thay cho tên c t.ườ ế ộ ệ ử ụ ệ ộ

•bool mysql_select_db ( string database_name [, resource link_identifier]): gán c s d li u hi n hành ho tơ ở ữ ệ ệ ạ đ ng trên server mà k t h p v i đ nh danh liên k t ch đ nh. N u không có đ nh danh liên k t nào đ c chộ ế ợ ớ ị ế ỉ ị ế ị ế ượ ỉ đ nh thí liên k t m cu i cùng đ c th a nh n. N u không có liên k t nào đ c m thì hàm s c thi t l pị ế ở ố ượ ừ ậ ế ế ượ ở ẽ ố ế ậ m liên k t nh khi hàm ộ ế ư mysql_connect( ) đã đ c g i không có tham s và s d ng nóượ ọ ố ử ụ

•string mysql_stat ( [resource link_identifier]): tr v tình tr ng hi n hành c a server.ả ề ạ ệ ủ•string mysql_tablename ( resource result, int i): tr v tên b ng c a tr ng, l y con tr k t qu tr v b iả ề ả ủ ườ ấ ỏ ế ả ả ề ở

hàm mysql_list_table( ) cũng nh ch m c integer.ư ỉ ụ•int mysql_thread_id ( [resource link_identifier]): tr v ID c a thread hi n hành. N u k t n i b m t vàả ề ủ ệ ế ế ố ị ấ

b n k t n i l i v i ạ ế ố ạ ớ mysql_ping( ), thì ID c a thread s b thay đ i. Đi u này có nghĩa là b n không nên l y IDủ ẽ ị ổ ề ạ ấ c a thread và ch a nó cho sau này. B n nên l y nó khi nào b n c n nó.ủ ứ ạ ấ ạ ầ

Page 25: Tai lieu huong_dan_ve_lap_trinh_php_7512

•resource mysql_unbuffered_query ( string query [, resource link_identifier [, int result_mode]]): g i m t truyở ộ v n SQL ấ query đ n MySQL mà không c n các hàng k t qu tìm n p và đ m m t cách t đ ng nhế ầ ế ả ạ ệ ộ ự ộ ư mysql_query( ).

Sau đây là ví d đ n gi n trình bày cách k t n i, th c thi câu truy v n, in các hàng k t qu và ng ngụ ơ ả ế ố ự ấ ế ả ừ k t n i t c s d li u MySQL.ế ố ừ ơ ở ữ ệ

<?php /* K t n i,ch n c s d li u */ế ố ọ ơ ở ữ ệ $link = mysql_connect("mysql_host", "mysql_user", "mysql_password") or die("Could not connect"); print "Connected successfully"; mysql_select_db("my_database") or die("Could not select database"); /* Th c hi n câu truy v n SQL */ự ệ ấ $query = "SELECT * FROM my_table"; $result = mysql_query($query) or die("Query failed"); /* In k t qu ra trang *.HTML */ế ả print "<table>\n"; while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { print "\t<tr>\n"; foreach ($line as $col_value) { print "\t\t<td>$col_value</td>\n"; } print "\t</tr>\n"; } print "</table>\n"; /* Free resultset */ mysql_free_result($result); /*Đóng k t n i */ế ố mysql_close($link);?>

S c n thi t c a m t c s d li u không ch b i nhu c u ph c v , t o ra các ngu n tài li u m t cáchự ầ ế ủ ộ ơ ở ữ ệ ỉ ở ầ ụ ụ ạ ồ ệ ộ phong phú, mà b i s tăng lên c a nhu c u truy c p các thông tin "tr c ti p" trong ngày b ng vi c s d ngở ự ủ ầ ậ ự ế ằ ệ ử ụ m t giao di n đ n gi n và h p nh t. B n có th cho phép m i ng i trong các văn phòng bán hàng truy v nộ ệ ơ ả ợ ấ ạ ể ọ ườ ấ m t c s d li u hàng t n kho. C s d li u này có th đ c xây d ng khác, ch y trên m t h đi u hànhộ ơ ở ữ ệ ồ ơ ỡ ữ ệ ể ượ ự ạ ộ ệ ề hoàn toàn khác v i máy tính c a ng i dùng.ớ ủ ườ

V i m t web server có c u hình t t, m t c s d li u server( ch ng h n nh MySQL), và m t vàiớ ộ ấ ố ộ ơ ở ữ ệ ẳ ạ ư ộ "phép th n thông" c a PHP, ch nh ng th ng i dùng c n m i có th có trên trình duy t web.ầ ủ ỉ ữ ứ ườ ầ ớ ể ệ

Cu i cùngố : n u b n c n các thông tin luôn năng đ ng, c p nh t, b n c n ph i phát tri n m t c s dế ạ ầ ộ ậ ậ ạ ầ ả ể ộ ơ ở ữ li u đ ng sau ng d ng web.V i m t c s d li u phía sau, web site c a b n s đ t đ c m t trình đ ph cệ ằ ứ ụ ớ ộ ơ ở ữ ệ ủ ạ ẽ ạ ượ ộ ộ ứ t p và linh ho t, n i mà d li u đ c t o ra và s d ng, thông tin đ c làm cho có ý nghĩa v i ng i dùng màạ ạ ơ ữ ệ ượ ạ ử ụ ượ ớ ườ không c n ph i b t bu c nó ph i “đúc n n” l i cho v a v i cách hi n th hay t ch c nó.ầ ả ắ ộ ả ặ ạ ừ ớ ể ị ổ ứ

IV. Ki n trúc c a m t ng d ng Web Databaseế ủ ộ ứ ụ

Các ph n c b n c a ng d ng Web Database là:ầ ơ ả ủ ứ ụ Client: trình duy t web c a ng i dùng, m t java applet, m t ng d ng java, th m chí là m tệ ủ ườ ộ ộ ứ ụ ậ ộ

platform ph thu c vào ch ng trình c a client.ụ ộ ươ ủ ng d ng logic: mã hoá các thu t toán s d ng trong các scripts CGI, các modul đ c bi t c a webỨ ụ ậ ử ụ ặ ệ ủ

server, th m chí m t ng d ng ph thu c vào server.ậ ộ ứ ụ ụ ộ K t n i database: the database API, hay là các giao th c k t n i thông th ng nh ODBC hayế ố ứ ế ố ườ ư

JDBC. Database server: RDBMS, ODBMS...

Page 26: Tai lieu huong_dan_ve_lap_trinh_php_7512

Vi c th c hi n các ng d ng đó có th đ c th c hi n b i s d ng mô hình nhi u l p, b i m t hay nhi uệ ự ệ ứ ụ ể ượ ự ệ ở ử ụ ề ớ ở ộ ề l p có th k t h p v i nhau. Cách th c hi n thông th ng nh t là h th ng ba l p.ớ ể ế ợ ớ ự ệ ườ ấ ệ ố ớ

1. L p th 1: web client( ví d nh trình duy t web c a ng i dùng).ớ ứ ụ ư ệ ủ ườ2. L p th 2: web server, các scripts c a CGI, k t n i API đ n database.ớ ứ ủ ế ố ế3. L p th 3: database server (ví d MySQL server).ớ ứ ụ

Mô hình các l p c th nh sau:ớ ụ ể ư

Đ i v i Web site xây d ng b ng PHP&MySQL thì mô hình ng d ng web database nh sau:ố ớ ự ằ ứ ụ ư

M t giao d ch chính c a Web database bao g m các giai đo n sau:ộ ị ủ ồ ạ1. Trình duy t Web c a ng i dùng s đ a ra m t yêu c u HTTP cho m t trang web riêng bi t... Víệ ủ ườ ẽ ư ộ ầ ộ ệ

d , mu n vi t ý ki n c a mình vào guestbook, sau khi đi n vào các thông tin c n thi t theo yêu c u vào trongụ ố ế ế ủ ề ầ ế ầ các form HTML, ng i dùng b m vào nút “G i đi”, thì thông tin v a m i vi t đó s đ c hi n th trên trangườ ấ ở ừ ớ ế ẽ ượ ể ị index.php,

2. Web server s nh n đ c m t yêu c u cho trang index.php, nó s truy xu t file này và chuy n nóẽ ậ ượ ộ ầ ẽ ấ ể qua PHP engine đ x lý.ể ử

3. PHP engine b t đ u phân tích script. Bên trong script là m t yêu c u k t n i đ n c s d li u vàắ ầ ộ ầ ế ố ế ơ ở ữ ệ th c thi m t truy v n. PHP m m t k t n i đ n MySQL server và g i trên m t truy v n chính xác.ự ộ ấ ở ộ ế ố ế ở ộ ấ

4. MySQL server nh n m t truy v n d li u và x lý nó, sau đó g i các k t qu v l i cho PHPậ ộ ấ ữ ệ ữ ở ế ả ề ạ engine.

Second Tier

Third Tier

ODBC/JDBCDatabase specific API

Database

HTTP

HTTP

Web browser

Java Applet/Application

Platform dependent Client

HTTP

Web server + CGI programs/Servlets/PHP scripts

32Trình duy tệ Web server PHP engine MySQL server

1

6 5 4

Page 27: Tai lieu huong_dan_ve_lap_trinh_php_7512

5. PHP engine hoàn thành vi c ch y script mà th ng liên quan đ n đ nh d ng các k t qu truy v nệ ạ ườ ế ị ạ ế ả ấ trong HTML. Sau đó nó tr k t qu HTML v l i Web server.ả ế ả ề ạ

6. Web server chuy n HTML v l i trình duy t, n i mà b n có th th y danh sách các quy n sáchể ề ạ ệ ơ ạ ể ấ ể mà b n đã yêu c u.ạ ầ

Quá trình này là căn b n t ng t đ i v i các script engine hay các database server mà chúng ta dùng.ả ươ ự ố ớ Th ng thì m t ph n m m Web server, PHP engine, và database server t t c cùng ch y trên cùng m t máy.ườ ộ ầ ề ấ ả ạ ộ Tuy nhiên, vi c database server ch y trên m t máy khác cũng là đi u khá thông d ng. B n có th làm đ cệ ạ ộ ề ụ ạ ể ượ đi u này b i các lý do b o m t, tăng dung l ng .ề ở ả ậ ượ