u.v n ed ui Th.S: NGUYỄN MINH - LƯƠNG PHÚC u.v n- ww w lib nhóm tin học thự c dụng P u.v H ed P n- ww w lib ui ed Kỹ thuật thủ thuật lập trình hướng đốì tưỢng ui Khái niệm, kỹ thuật viết mã lib ♦ T rọii tậ p hạn có hội cọ x t đ ẻ n ân g cao Icỹ -w ww n ăiig lậ p trm li tliôiig q u a việc tliự c h n h s ủ dm iíỊ tín h cao cáp, ch ẳn g h n n h u vấii íiti sd d ứ liệii, MySQỊv, SQỊvite P D O c tia P H P ed u.v n ♦ Với phươiiq p h áp hiíớnQ d ản t n g ví d ụ b n Idiỗnp Iiliửng d ể dàiiíỊ n ắ m b ắ t Id iái mộiTL c ă n b ảii, nâng cao liơii ciiiiẹỊ Iiliit c ách SI^ dxuig côniỊ cxx lậ p trù ili ui New Edition ciia P H P đ ễ v iế t ch tíớ n g t r ì n h P I Ỉ P că n bảii n ê n làm th e o đ ể n ắm vũnữ, n ộ l dting đtíỢc tr ìn h bày, b ao g è m cài đ ặ t phlui m ề m , c ú p h p ngơn ngiì, c ẩ u trứ c d ữ K ệư ♦ Mà điểm đặc b iệ t ciia sách I>hươiig pliáỊ hướng d ẫ n r ẩ t đơn g iản cỢc kỳ d ề tiế p tìiư ww w lib ui ed u.v n -w ww lib ^ Mỗi chương cồn có n h iề u b i tậ p tliụ c liảiứá n ià b ạn NHÀ XƯẤT BẢN HỒNG ĐỨC u.v n ed ui .lib ww w ed u.v n ui .lib -w ww lib -w ww ed ui n- u.v ww w lib ui ed n- u.v ww w lib ui ed u.v n u.v n ed ui .ha ww w lib I v l NÓI ĐẦU ww w lib ui ed u.v n- B ộ s c h " K j' t l i u ậ t v th ủ t h u ậ t lậ i) tr ìn li liư n g đ ố i tư ợ n íị P H P ” đ ợ c b i ê n so ạn n h ằ m m ụ c đ íc h d n h clio n h ữ n g người m i b ắ t đ ầ ii biíớc c h â n vào t h ế giới c ủ a ng ô n n g ữ lậ p ù i h P H P K h ô n g giống n h n h ữ n g s c h Idiác, s c h n y Id iơ n g đ ị i h ỏ i b n p h ả i h ọ c q u a trư c v ấ n đ ề c ă n b ả n v ề lậ p tr ìn li W eb ha}' sỡ d ữ liệ u M đ iể m đ ặc b i ệ t c ủ a b ộ s c h c h ú ih p h n g p h p h n g d ẫ n r ấ t đ n g iả n v cự c Icỳ d ể tiế p ứ iu ed u.v n -w ww lib ui ed u.v n- T liự c vậy, với p h n g p h p h ng d ẫ n b ằ n g v í d ụ b n s ẽ Id iô n g n h ữ n g d ễ d n g n ắ m b ắ t Id iá i n iệ m c ă n b ả n , m tliồ n g q u a đ ó s ẽ d ầ n trở n ê n q u e n tíiu ộ c với Id iái n iệ m n â n g cao h n c ủ n g n h c c h s d ụ n g cồng c ụ lậ p trìn h củ a P H P đ ể ch n g t r ì n h P H P c ă n b ả n H n n ữ a , với tr ọ n b ộ tậ p b n s ẽ có liộ i cọ x t đ ể n â n g cao k ỷ n ă n g lậ p t r ì n h tliơ n g q \ia việc tliự c lià iili s d ụ jig t í n h n ă n g cao cấ p , c h ẳ n g h n n h v ấ n tin sở d liệ u , M ySQ Ị/, S Q L ite v PD O c ủ a P H P , c c cô n g n g liệ XMIv, c c coolcie, s e s s io n lie a d e r, p liầ n m rộng c ủ a b ô n t h ứ b a .lib ui S c h có b ố c ụ c rỗ rà n g th e o từ iig ch n g đ ề m ục, b tíớ c h iíớ n g d ẫ n c ụ ứ iể d ễ h ic ii M ỗi cliiíơ ng cịn có n h iề u b i tậ p ứ iự c h n li m b n n ê n m th e o đ ể nắm ^àỈIlg n ộ i d m ig d ợ c tr ì n h b ày , b ao cỊồtn c i đ ặ t p h ầ n n iè in , c ú p h p n g ô ii n g ữ , c ấ u ta*úc đ ữ liệ u , th tíờ n g -w ww I x m li đ i c u I d i i t n , c c lià n i c i s ẵ n , v n liiềa i t c Aại liữ íi íc h k h c ww w lib ui ed u.v n H y vọng s c h s ẽ n iộ t tà i liệ u h ọ c tậ p h ữ u íc h ch o b n đ ọ c tro n g q u t r ì n h ti-ỏ tlià n h m ộ t c h u y ê n g ia v ề PH P T ấ c g iả u.v n ed ui .lib ww w ed u.v n ui .lib -w ww lib -w ww ed ui n- u.v ww w lib ui ed n- u.v ww w lib ui ed u.v n u.v n n- ww w lib ui ed C h n g 7: Làm v iệ c vớ i sỏ liệu S Q L ui ed u.v PHẨN ww w lib ui ed u.v n -w ww lib ui ed u.v n -w ww lib ui ed u.v n- ww w lib Làm viêc với liêu từ nguồn khác CbiửJ9ig 7: Làm v iệ c với cá c s d ữ liệu SQL Chươìig &• Làm việc với XML Chương 9: Làm việc với Cookie, Sessiơn, H ea d er Chươĩtg 10: X lý cá c lỗi Chiừýiìg 11: Bảo vệ an toàn PHP Cbươềig 12: M rộng PH P u.v n C h n g 7: Làm v iệ c v i sỏ liêu SQL w lib ui ed u.v n- ww w lib ui ed .ha ui ed u.v n- ww Làm việc với sd liệu vò SQL Những kỹ k h i niêm lib Ị Thêm, biên tập, xóa xem record sứ dụng MySQL SQLiie CO' sở ciữ liệit ed u.v n • -w ww Ể! Hoc nbiÌỲìg kbái niệm sở d ữ liộn I'à Stnicliired Qiierỵ Langỉiage M Tniy tìm record sứ d ũ liệu iĩới PHP ui • ỉỉiộii lực bóa htli d ữ liệu ĩihập Cíta ngííời dũng sang mộ! sở ìiC>ti ì'ới PHP -w ww lib » Viết cbỉỉơtìg trình điền khiền bàng sở đ ữ liệu kbả chìtyển (portable) M ww w lib ui ed u.v n ột lý cho th ô n g dụng PH P n h m ột ngôn ngữ v iết script Web hỗ trợ m ột dãy rộng hệ th ố n g liệu quan hệ Sự hỗ trợ làm cho n h p h t triển Web dễ dàng tạo Web site điều k h iển liệu tạo nguyên ứng dụng Web m ột cách n h an h chóng hiệu u.v n ui ed u.v n- ui ww w lib PH P hỗ trợ 15 máy sở liệu khác bao gồm Microsoft SQL Server, IBM DB2, PostgreSQ L, Oracle Cho đến P H P 5, hỗ trợ đă cung cấp qua extension sở iiệu riêng, extension có chức n ăn g tín h n ăn g riên g Tuy nhiên, điều làm cho n h p h t triể n khó th ay đổi từ m ộ t máy sở liệu san g m ột m áy sở đữ liệu khác PH P giải tìn h n ày b ằn g việc giới thiệu m ột API chung cho truy cập sở liệu: extension P H P D ata Objects (PDO), cung cấp m ột giao diện hợp n h ấ t để làm việc với sở Uệu %'à giúp n h p h t triể n xử lý sở liệu k hác n h au cách n h ấ t quán ed C h n g : Làm v iệ c với c s ỏ liệu SQL lib ui ed u.v n- ww w lib T rong P H P 5.3, extension PDO cải tiến th êm với hỗ trợ cho m áy sở liệu tối ưu h ó a th ê m cho an n in h hiệu suất Đ ể đ t k h ả n ăn g tương thích ngược, extension sở liệu riên g tiếp tục dược hỗ trợ Bởi b ạn thường tự n h ậ n thấy m ình chọn m ột extension riêng m ình (m có th ể n h an h đưa nhiều tín h n àn g hơn) PDO (đưa tín h k h ả chuyển tín h n h ấ t quán qua m áy sở liệu), chương n ày đề cập d ến h tùy chọn; chương giới thiệu PDO th ảo luận h a i sơ’ extension riên g th ó n g dụng n h ấ t PHP, extension MySQL Im proved extension SQLite -w ww Giới ỉh iệu sở liệu SQL -w ww lib ui ed u.v n Trong thờ i đại In tern et, th n g tin khơng cịn trìn h bày tro n g tủ đựng hồ sơ T hay vào đó, lưu trữ dạng số số tro n g cấc kiểu liệu điện tử vốn "hộp chứa" lưu trữ liệu áp dặt m ột cấu trúc n h ấ t định th ô n g tin Những sở liệu điện tử khơng chiếm khơng gian v ật lý không gian gỗ kim loại tương ứng m chúng cịn chứa đầy cơng cụ để giúp người dùng lọc truy tìm n h a n h thơng tin sử dụng tiêu chí khac ưhau Cụ th ế hầu h ế t sở liệu điện tử ngày sở liệu quan hệ (relational database) cho p h ép người dùng dịnh nghĩa mối quan hệ b ản g sở liệu khác n h au để tìm kiếm phân tích hiệu ww w lib ui ed u.v n H iện có sẵn m ột số lớn hệ thông quản lý sở liệu, m ột số thương m ại m ột số m iễn phí Có lẽ b ạn nghe đến m ột vài hệ th ô n g này: Oracle, M icrosoft Access, My SQL, PostgreSQL N hững hệ th ô n g sở liệu ứng dụng p h ần mềm m ạnh, phong phú tín h n ăn g có k h ả n tổ chức tìm kiếm h àn g triệu record với tốc độ r ấ t cao; chúng dược sử dụng rộng rã i với doanh nghiệp v ăn phòng u.v n C h n g 7: Làm việc với cờ s liệu v SQL ed 10 u.v n- ww w lib ui phủ, thường cho mục đích r ấ t quan trọng Trước vào chi tiế t cụ th ể việc xử lý record sở liệu với P H P , trước tiê n cần p h ải hiểu rõ k h i niệm sở liệu Nếu b n làm quen với sở liệu này, p h ần sau dầy cung cấp m ột n ền tả n g v cho bạn th nghiệm với m ột tập thực tiễn tro n g S tructured Query Language (SQL) Thông tin hữu dụng để hiểu nội dung n â n g cao tro n g p h ần .ha ui ed Tìm hiểu cớ sỏ liệu, record, v khóa (Prím a ry Key) ww w lib Mọi sở liệu gom m ôt nhiều b ản g (table) N hữ ng b ản g n ày tạo cấu trúc liệu th n h h àn g cột, áp đ ặt tổ chủc lên liệu H ình 7.1 m inh h ọ a m ột bảng điển hình .lib ui ed u.v n- Bàng chứỉt sõ’ jiệ'j b án h ãn g oho vỊ !;rj k h ác n h au vt'i hàny record (bản ghi) chứa thòng tin cho m ôt vị rri va n ăm kỉiác Mồi recorđ p h ân chia trở th n h cột field (trường) với trường chứa m ột đoạn thông tin khác Cấu trúc dạng b ản g n ày làm cho dễ tìm kiếm trê n b ản g để tìm record khớp với tiêu chí (criteria) cụ thể: ví dụ, tấ t vị tr í có doanh sơ' lớn $10,000 doanh s ố cho t ấ t vị trí tro n g n ăm 2008 ww w lib ui ed u.v n -w ww lib ui ed u.v n -w ww Các record tro n g b ản g không xếp theo b ấ t kỳ th ứ tự cụ th ể chúng có th ể p h ân loại theo thứ tự bảng chữ cái, th eo năm , theo tổng doanh số, theo vị trí theo b ấ t kỳ tiêu chí m b n chọn xác định Do để làm cho dễ n h ậ n dạng m ột record cụ th ể, cần p h ải th ê m m ộ t thuộc tín h n h ận d ạn g n h ấ t vào record chẳng h ạn m ột số serial m ã trìn h tự T rong ví dụ trước, record n h ậ n d ạn g b àn g m ột trường 'record ID' n h ất; trường ảược gọi p rim ary key (khóa chính) clio bảng ỊD Yưíìr Lĩcaiìơìi Sales {ĩ) 2007 ỏdấỉĩiỉi [ W fi •y 8574 2007 Chicaco ì 2007 Washincion 12929 Tị 2007 Ncw York 13636 2007 Lo*; Aiìícles S748 2.sAnkĩcles 12 2008 Ba^ion 4745 Hình 7.1 Một bảng mẫu Thủ thuật u.v n- u.v n ww w lib M ộ t cách dễ dàng đ ể hiểu khái niệm m ộ t tương dồng H ăy xem m ộ t c sở liệu m ột th viện m ỗi bảng m ột kệ sách bên th viện D o m ột record dại diện diện tử m ột sách trê n m ộ t kệ sách với tựa dề sách khóa record Nếu thiếu tựã đề này, không th ể dễ dàng phân b iệ t m ột sách với m ột cuô'n sách khác (Cách n h ấ t d ể làm điều nàỵ m m ỗi cuô'n sách kiểm tra nội dung - m ộ t tiế n trình mâ't thời gian mà khóa ch ín h giúp bạn tránh ui ed 11 C h n g 7: Làm v iệ c với sở liệu SQL ed được) n- ww w lib ui M ột bạn đưa thông tin vào m ột bảng, bạn thường muốn sử dụng aó để tr ả lời câu hỏi cụ th ể ■ví dụ, vỊ trí có doanh số lớn $5000 tro n g 2008? N hững câu hỏi gọi query (mẫu truy vấn) k ế t tr ả sở liệu nhằm phản hồi lại query gọi tậ p hợp k ế t (result set) Các query thực th i sử dụng Structured Query Language u.v Tìm hiểu m ối quan hệ khóa ngoại (Poreign Key) -w ww lib ui ed Bạn b iết rằ n g m ột sở liệu có th ể chứa nhiều bảng Trong m ột hệ thô ng sở liệu quan hệ, bảng có th ể liên k ết với m ột nhiều trường chung gọi khóa ngoại (foreign key) N hững kh ó a ngoại làm cho có th ể tạo mơ’i quan hệ m ột đô'i (one-to-one) m ột đối nhiều (one-to-many) bảng k hác k ế t hợp liệu từ nhiều b ản g để tạo tậ p hợp k ế t to àn diện G a it t lD ed u.v n Để m inh họa, h ãy xem xét hình 7.2 trìn h bày ba b ản g liên kết .ha ui H oítoí Crim c Roni;mcc AitỉhorỉD AufỊiorS N ora Rohcrts ww w lib ui ed u.v n BnoklD BookNahie j T h c S h io iiự ShuUer ĩslíìnd Piỉỉ SeoiaUưy Tha Overlook Sisters Safc HnrKnír T a n ik Musk* Blood Bix)thers G e tu rỉí) AuỉhorlD i ì ì l l *J 3 Hình 7.2 Các mơi quan hệ bảng u.v n C h d n g 7: Làm việc v ò i c d sò liệu SQL ed 12 u.v n- ww w lib ui H ình 7.2 m in h h ọ a ba bảng, chứa thông tin tá c giả (bảng A), th ể loại (bảng G), sách (bảng B) Các b ản g G B k h đơn giản: chúng chứa m ột d an h sách tê n th ể loại (genre) tá c giả, với record n h ậ n dạng m ột khóa n h ấ t Bỗng B phức tạp hơn: sách tro n g bảng liên k ế t với m ộ t th ể loại cụ th ể khóa genre (từ bảng G) với m ột tác g iả cụ th ể qua khóa author (từ b ản g A) ww w lib ui ed B ăng cách dò th eo khóa đến b ản g nguồn tuơng ứng caa chúng, b ạn có th ể dễ d àn g n h ậ n dạng tác giả th ể loại cho m ộ t sách cụ thể Ví du, cú th ể tliây vằng tựa đề "The Shin.ing" v iết "Stephon ĩliiig" thuộc th ể loại "HoiTOr" Tương tự, b ắ t đầu từ dầu k ia có t}iể th ấ y rằ n g tác giả "M ichael Connelly" viết hai cuôn sách "The Overlook' "Trunk Music" ed u.v n -w ww lib ui ed u.v n- N hững mố.l quaii hệ n(iư thấy ỉiình 7.2 tạo nen néii tản g m ột hệ th ố n g sd dử liệu quan hệ Liẻn k ế t bảng sử dụng khóa ngoại hiệu lựa chọn khác: k h i tạ o m ột b ản g thứ ngoại trừ bồn rửa n h bếp để chứa tấ t thông tin th o t n h ìn trơ n g tiện lợi, cập n h ậ t m ột b ản g ln m ột tiến tr ìn h th ủ cóng (và dễ sai sót) để tìm trường hợp m ột giá trị cụ th ể th a y th ế b ằn g m ột giá trị P h â n ch ia th ông tin th n h b ản g độc lập liên k ế t bảng n ày b ằn g k h ó a ngoại bảo đám rằn g m ộ t m ẫu th ô n g tin cụ th ể xuất h iện m ột lầ n m ột lần sở liệu; điều loại bỏ p hần dư thừa, đơn giản hóa th ay đổi (bằng việc cục h ó a chúng sang m ột vị trí) làm cho sô liệu gọn dễ q u ản lý ww w lib ui ed u.v n -w ww lib ui Tiến trìn h hợp lý hóa m ột sd liệu b ằn g việc d in h n g h ĩa thực thi môi quan hệ m ột đôi m ột m ột đôi nhiều b ản g th n h phần gọi chuẩn hóa sớ liẹu (d atab ase norm alization) m ột tá c vụ ch ín h m m ột kỹ sư sở liệu p h ả i đối m ậ t k h i tạo m ột sd liệu T rong tiế n trìn h chuẩn hóa, kỹ sư sở liệu n hận dạng mô'i quan hệ chéo phụ thuộc k hơng xác bảng tối ưu hóa việc tổ chức liệu cho query SQL thực thi với hiệu su ất tối đa Cũng có m ột sơ" dạng chuẩn giúp b ạn te s t p h ạm vi m ột sở liệu chuẩn hóa; dạng chuẩn n ày cung cấp nhữ ng hướng dẫn hữu dụng để giúp bảo đảm việc th iế t k ế sở liệu vừa n h ấ t quán cấu trúc vừa hiệu ... Langỉiage M Tniy tìm record sứ d ũ liệu iĩới PHP ui • ỉỉiộii lực bóa htli d ữ liệu ĩihập Cíta ngííời dũng sang mộ! sở ìiC>ti ì'ới PHP -w ww lib » Viết cbỉỉơtìg trình điền khiền bàng sở đ ữ liệu kbả... 11 2í)08 L«>.sAnkĩcles 12 2008 Ba^ion 4745 Hình 7.1 Một bảng mẫu Thủ thuật u.v n- u.v n ww w lib M ộ t cách dễ dàng đ ể hiểu khái niệm m ộ t tương dồng H ăy xem m ộ t c sở liệu m ột th viện m... atab ase norm alization) m ột tá c vụ ch ín h m m ột kỹ sư sở liệu p h ả i đối m ậ t k h i tạo m ột sd liệu T rong tiế n trìn h chuẩn hóa, kỹ sư sở liệu n hận dạng mô'i quan hệ chéo phụ thuộc