Nếu thiếu tựã đề này, không th ể dễ dàng phân b iệ t m ột cuốn sách này với m ột cuô'n sách khác.. Các query được thực th i sử dụng S tructured Query Language... Ví du, cú th ể tliây vằn
Trang 1Th.S: NGUYỄN MINH - LƯƠNG PHÚC
và n h ó m tin học thự c d ụ n g
Kỹ thuật và thủ thuật lập trình hướng đốì tưỢng
Khái niệm, kỹ thuật và viết mã
New Edition
♦ T rọii bộ 2 tậ p hạ n s ẽ có cơ h ộ i cọ x á t đ ẻ n ân g cao Icỹ
n ăiig lậ p trm li tliôiig q u a v iệc tliự c h à n h s ủ dm iíỊ các
t ín h năn g cao cáp, c h ẳ n g h ạ n n h u các vấii íiti cơ sd
d ứ liệii, MySQỊv, SQ Ịvite v à P D O c tia P H P
♦ Với phươiiq p h áp hiíớnQ d ản t à n g ví d ụ b ạ n sẽ Idiỗnp
Iiliửng d ể dàiiíỊ n ắ m b ắ t các Id iá i mộiTL c ă n b ả ii, nâng cao liơii ciiiiẹỊ Iiliit c á c h SI^ dxuig các côniỊ cxx lậ p trù ili ciia P H P đ ễ v iế t c á c c h tíớ n g t r ì n h P I Ỉ P c ă n bảii
^ Mỗi chương cồn có n h iề u b à i tậ p tliụ c liảiứá n ià b ạ n
n ê n là m th e o đ ể n ắ m vũnữ, n ộ l d ting đtíỢc tr ìn h bày,
b a o g è m s ự cài đ ặ t p h lu i m ề m , c ú p h á p n g ô n ngiì, các
c ẩ u trứ c d ữ K ệư
♦ M à đ iểm đ ặc b iệ t ciia bộ sách chính là ở I>hươiig pliáỊ hướng d ẫ n r ẩ t đ ơ n g iả n v à cỢc kỳ d ề tiế p tìiư
NHÀ XƯẤT BẢN HỒNG ĐỨC
www.lib.haui.edu.vn
- www.lib.haui.edu.vn
- www.lib.haui.edu.vn
- www.lib.haui.edu.vn
- www.lib.haui.edu.vn
Trang 2www.lib.haui.edu.vn
- www.lib.haui.edu.vn
- www.lib.haui.edu.vn
- www.lib.haui.edu.vn
- www.lib.haui.edu.vn
Trang 3I v ờ l NÓI ĐẦU
B ộ s á c h " K j' t l i u ậ t v à th ủ t h u ậ t lậ i) t r ì n l i 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 ế g iớ i c ủ a n g ô n
n g ữ lậ p ư ù i h P H P K h ô n g g iống n h ư n h ữ n g s á c h Id iá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 cá c v ấ n đ ề
c ă n b ả n v ề lậ p t r ì n l i W eb ha}' cơ sỡ d ữ liệ u M à đ iể m đ ặ c
b i ệ t c ủ a b ộ s á c h c h ú i h là ở 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
T liự c vậy, với p h ư ơ n g p h á p h ư ớ n g 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 cá c I d 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 cá c Id iá i
n iệ m n â n g c a o h ơ n c ủ n g n h ư c á c h s ử d ụ n g cá c cồ n g c ụ lậ p
t r ì n h c ủ a P H P đ ể các c h ư ơ n g t r ì n h P H P c ă n b ả n
H ơ n n ữ a , với tr ọ n b ộ 2 t ậ p b ạ n s ẽ có 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 v iệ c tliự c lià iili s ử d ụ jig
cá c t í n h n ă n g c a o c ấ p , c h ẳ n g h ạ n n h ư cá c v ấ n t i n cơ 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 và lie a d e r , v à cá c p liầ n m ở rộ n g
c ủ a b ô n t h ứ b a
S á c h có b ố c ụ c rỗ rà n g th e o từ iig c h ư ơ n g v à đ ề m ụ c,
cá c b tíớ c h iíớ n g d ẫ n c ụ ứ i ể v à d ễ h ic ii M ỗi cliiíơ n g cò n có
n h iề u b à i tậ p ứ iự c h à n li m à b ạ n n ê n là m th e o đ ể n ắm
^àỈIlg n ộ i d m ig d ư ợ c t r ì n h b à y , b a o cỊồtn s ự c à i đ ặ t p h ầ n
n iè in , c ú p h á p n g ô ii n g ữ , các c ấ u ta*úc đ ữ liệ u , cá c th tíờ n g
I x m li đ i c u I d i i t n , c á c l i à n i c à i s ẵ n , v à n liiề a i t á c Aại liữ íi
íc h k h á c
H y vọ n g s á c h s ẽ là n iộ t tà i liệ u h ọ c t ậ p h ữ u íc h c h o b ạ n
đ ọ c tr o n g q u á t r ì n h ti-ỏ tlià n h m ộ t c h u y ê n g ia v ề P H P
T ấ c g iả
www.lib.haui.edu.vn
- www.lib.haui.edu.vn
- www.lib.haui.edu.vn
- www.lib.haui.edu.vn
- www.lib.haui.edu.vn
Trang 4www.lib.haui.edu.vn
- www.lib.haui.edu.vn
- www.lib.haui.edu.vn
- www.lib.haui.edu.vn
- www.lib.haui.edu.vn
Trang 5C h ư ơ n g 7 : Làm v iệ c v ớ i c á c cơ sỏ dữ liệu và S Q L
PHẨN 2
Làm viêc với dữ
liêu từ những nguồn khác
CbiửJ9ig 7: Làm v iệ c vớ i c á c cơ s ở
d ữ liệu và SQL Chươìig &• Làm v iệ c vớ i XML Chương 9: Làm v iệ c vớ i cá c Cookie, Sessiơn, và H e a d e r
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
www.lib.haui.edu.vn
- www.lib.haui.edu.vn
- www.lib.haui.edu.vn
- www.lib.haui.edu.vn
- www.lib.haui.edu.vn
Trang 68 C h ư ớ n g 7: Làm v iệ c v ớ i c á c cơ sỏ dữ liêu và SQ L
Làm việc với các cơ sd dữ
liệu vò SQL
Ể! Hoc nbiÌỲìg kbái niệm cơ sở d ữ liộn I'à Stnicliired Qiierỵ Langỉiage
• Thêm, biên tập, xóa và xem các record sứ dụng các CO' sở ciữ liệit MySQL và SQLiie
M Tniy tìm các record cơ sứ d ũ liệu iĩới PHP
• ỉỉiộii lực bóa và htli d ữ liệu ĩihập Cíta ngííời dũng sang mộ! cơ sở dữ
ìiC>ti ì'ới PHP
» Viết các cbỉỉơtìg trình điền khiền bàng cơ sở đ ữ liệu kbả chìtyển
(portable)
Một tro n g những lý do cho sự th ô n g dụng của P H P n h ư là m ột
ngôn ngữ v iế t scrip t Web là nó hỗ trợ m ột dãy rộng các hệ
th ố n g dữ liệu quan hệ Sự hỗ trợ làm cho các n h à p h á t triể n Web dễ d àng tạ o các Web site điều k h iể n b ằng dữ liệu v à tạo nguyên mẫu các ứng dụng Web m ột cách n h a n h chóng v à hiệu quả
www.lib.haui.edu.vn
- www.lib.haui.edu.vn
- www.lib.haui.edu.vn
- www.lib.haui.edu.vn
- www.lib.haui.edu.vn
Trang 7C h ư ơ n g 7 : Làm v iệ c với các c ơ s ỏ dữ liệu và SQL
P H P hỗ trợ h ơ n 15 bộ m áy cơ sở dữ liệu khác nh au bao gồm Microsoft
SQL S erver, IBM DB2, PostgreSQ L, và Oracle Cho đến P H P 5, sự hỗ trợ
này đă được cung cấp qua các extension cơ sở dữ iiệu riêng, mỗi extension
có chức n ă n g v à tín h n ăn g riên g của nó Tuy nhiên, điều này đ ã làm cho các
n h à p h á t triể n kh ó th a y đổi từ m ộ t bộ m áy cơ sở dữ liệu này sa n g m ột bộ
m áy cơ sở đữ liệu khác PH P 5 đ ã giải quyết tìn h huống n ày b ằ n g việc giới
th iệu m ột A PI chung cho sự tru y cập cơ sở dữ 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 cơ sở dữ
Uệu %'à giúp các n h à p h á t triể n xử lý những cơ sở dữ liệu k h ác n h au một
cách n h ấ t quán
T rong P H P 5.3, extension PDO đã được cải tiế n th ê m nữa với sự hỗ trợ
cho các bộ m áy cơ sở dữ liệu m ới v à những tối ưu h ó a th ê m nữa cho an n in h
v à hiệu su ất Đ ể đ ạ t được k h ả n ă n g tương thích ngược, các extension cơ sở
dữ liệu riê n g cũng tiếp tục dược hỗ trợ Bởi vì b ạn sẽ thư ờng tự n h ậ n th ấy
m ình đã chọn giữa m ột extension riêng của m ình (m à có th ể n h a n h hcm
hoặc đưa r a n h iều tín h n àn g hơn) hoặc PDO (đưa r a tín h k h ả chuyển và
tín h n h ấ t quán qua các bộ m áy cơ sở dữ liệu), chương n ày đề cập d ến h a i tùy
chọn; chương giới th iệu về PDO v à cũng th ả o luận h a i tro n g sô’ các exten-
sion riê n g th ó n g dụng n h ấ t của PH P, extension MySQL Im proved và ex-
ten sio n SQLite
Giới ỉh iệ u các cơ sở dữ liệu và SQL
Trong th ờ i đại In te rn e t, th ô n g tin không còn được tr ìn h bày tro n g các tủ
đựng hồ sơ nữa T hay vào đó, nó được lưu trữ dưới d ạng các số 1 và số 0
tro n g cấc kiểu dữ liệu điện tử vốn là những "hộp chứa" lưu trữ dữ liệu áp dặt
m ột cấu trúc n h ấ t định về th ô n g tin N hững cơ sở dữ liệu điện tử này không
chỉ chiếm í t không gian v ậ t lý hơn không gian gỗ và kim loại tương ứng m à
chúng còn chứa đầy những công cụ để giúp người dùng lọc và tru y tìm
n h a n h th ô n g tin sử dụng những tiêu chí khac ưhau Cụ th ế hầu h ế t các cơ
sở dữ liệu điện tử ngày nay là những cơ sở dữ liệu quan h ệ (relational
database) cho p h ép người dùng d ịn h nghĩa mối quan h ệ giữa các b ản g cơ sở
dữ liệu k h ác n h au để tìm kiếm v à p hân tích hiệu quả hơn
H iện có sẵn m ột số lớn các h ệ thông quản lý cơ sở dữ liệu, m ột số thương
m ại và 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, và PostgreSQL N hững h ệ th ô n g cơ sở
dữ liệu n ày là nhữ ng ứng dụng p h ần m ềm m ạnh, phong phú tín h n ăn g có
k h ả n án g tổ chức v à tìm kiếm h à n g triệu record với nhữ ng tốc độ r ấ t cao;
do đó chúng dược sử dụng rộng rã i với các doanh n g h iệp v à v ă n phòng
www.lib.haui.edu.vn
- www.lib.haui.edu.vn
- www.lib.haui.edu.vn
- www.lib.haui.edu.vn
- www.lib.haui.edu.vn
Trang 810 C h ư ơ n g 7: Làm việ c với các cờ s ở dữ liệ u v à SQ L
chính phủ, thư ờng cho nhữ ng mục đích r ấ t quan trọng Trước k h i đi vào chi
tiế t cụ th ể của việc xử lý các record cơ sở dữ liệu với P H P , trước tiê n cần
p h ải hiểu rõ các k h á i niệm cơ sở dữ liệu cơ bản Nếu b ạ n m ới là m quen với
cơ sở dữ liệu này, các p h ầ n sau dầy cung cấp m ột n ề n tả n g v à cũng cho b ạn
th ử nghiệm với m ột bài tậ p thực tiễ n tro n g S tru c tu red Q uery Language
(SQL) T hông tin này sẽ hữu dụng để hiểu nội dung n â n g cao hơn tro n g các
p h ần tiế p theo
Tìm hiểu các cớ sỏ dữ liệu, record, v à khóa chính (Prí-
m a ry Key)
Mọi cơ sở dữ liệu gom m ôt hoặc nhiều b ản g (table) N h ữ n g b ả n g n ày tạo cấu trú c dữ liệu th à n h các h àn g v à cột, áp đ ặ t sự tổ chủc lê n dữ liệu H ình
7.1 m inh h ọ a m ột b ảng điển hình
B àng này chứỉt các sõ’ jiệ'j b án h ãn g oho vỊ !;rj k h á c n h au vt'i hàny hoặc record (bản ghi) chứa thòng tin cho m ôt vị rri v a n ă m kỉiác Mồi
recorđ được p h â n chia trở th à n h các cột hoặc field (trường) với mỗ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 r a các record khớp với tiêu chí (criteria) cụ th ể: ví
dụ, t ấ t cả vị tr í có doanh sô' lớn hơn $10,000 hoặc d o an h s ố cho t ấ t cả vị trí
tro n g n ăm 2008
Các record tro n g b ản g không được sắp xếp th eo b ấ t kỳ th ứ tự cụ th ể - chúng có th ể được p h ân loại th eo thứ tự b ảng chữ cái, th e o n ăm , th eo tổng
doanh số, th eo vị trí hoặc th eo b ấ t kỳ tiêu chí m à b ạ n chọn xác định Do đó
để làm cho dễ n h ậ n dạn g 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 duy n h ấ t vào mỗi record chẳng h ạ n n hư m ột số se ria l hoặc m ã
trìn h tự T ro n g ví dụ trước, mỗi record được n h ậ n d ạ n g b àn g m ột trường
'record ID' duy n h ất; trường này ảược gọi là p rim ary key (khóa chính) clio
bảng
ì 2007 Washincion 12929
Tị 2007 Ncw York 13636
5 2007 Lo*; Aiìícles S748
6 2<X)7 Rosloil M78
10 2008 Ncsv Yoric (2373
11 2í)08 L«>.s Ankĩcles
Hình 7.1 Một bảng mẫu
www.lib.haui.edu.vn
- www.lib.haui.edu.vn
- www.lib.haui.edu.vn
- www.lib.haui.edu.vn
- www.lib.haui.edu.vn
Trang 9C h ư ơ n g 7: Làm v iệ c với các cơ sở dữ liệu và SQL 11
Thủ thuật
M ộ t cách dễ dàng đ ể hiểu những khái niệm này là bằng m ộ t sự tương dồng
H ăy xem m ộ t c ơ sở dữ liệu như là m ột th ư viện và m ỗi bảng là m ột kệ sách bên tro n g th ư viện này D o đó m ột record là sự dại diện diện tử của m ột cuốn sách trê n m ộ t kệ sách vớ i tựa dề của cuốn sách là khóa chính của record Nếu thiếu tựã đề này, không th ể dễ dàng phân b iệ t m ột cuốn sách này với m ột cuô'n sách khác (Cách duy n h ấ t d ể làm điều nàỵ là m ở m ỗi cuô'n sách và kiểm tra nội dung của nó - m ộ t tiế n trìn h mâ't thời gian m à khóa c h ín h sẽ giúp bạn tránh được)
M ột k h i 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ác câu hỏi cụ th ể ■ ví dụ, bao nhiêu vỊ trí có doanh số lớn hơn
$5000 tro n g 2008? N hữ ng câu hỏi này được gọi là các query (mẫu tru y vấn)
và k ế t quả được t r ả về bởi cơ sở dữ liệu n h ằm p hản hồi lạ i nhữ ng query này
được gọi là các tậ p hợp k ế t quả (result set) Các query được thực th i sử dụng
S tructured Query Language
Tìm hiểu các m ối quan hệ và khóa ngoại (Poreign Key)
B ạn đ ã b iế t rằ n g m ột cơ sở dữ liệu có th ể chứa nhiều bảng Trong m ột hệ
th ô n g cơ sở dữ liệu quan hệ, những bảng này có th ể được liên k ết với nhau
b ằng m ột hoặc n h iều trường chung được gọi là các kh ó a ngoại (foreign key)
N hững k h ó a ngoại này làm cho có th ể tạo các mô’i q uan h ệ m ột đô'i một
(one-to-one) hoặc m ột đối nhiều (one-to-many) giữa các b ảng k h ác n hau và
k ế t hợp dữ liệu từ n h iều b ản g để tạo các tậ p hợp k ế t quả to à n diện hơn
Để m inh họa, h ãy xem xét h ìn h 7.2 trìn h bày b a b ản g được liên kết
G a it t lD
1 H oítoí
2 Crim c Roni;mcc
AitỉhorỉD AufỊiorS<mtĩ
1 Sieplicn K ìiìk
2 Uamelk* Srccle
3 lX'nnỉs Lcliano
4 M K'hael C onnellv
> N ora Rohcrts
B noklD BookNahie G e tu rỉí) A uỉh orlD
4 Tha Overlook 1 4
Hình 7.2 Các môi quan hệ bảng
www.lib.haui.edu.vn
- www.lib.haui.edu.vn
- www.lib.haui.edu.vn
- www.lib.haui.edu.vn
- www.lib.haui.edu.vn
Trang 10H ìn h 7.2 m in h h ọ a b a bảng, chứa thông tin về các tá c giả (bảng A), các
th ể loại (bảng G), v à các sách (bảng B) Các b ản g G và B k h á đơn giản:
chúng chứa m ột d a n h sách các tê n th ể loại (genre) và tá c giả, với mỗi record được n h ậ n d ạng b ằng m ột kh ó a ch ín h duy n h ấ t B ỗng B hơi phức tạp hơn: mọi sách tro n g bản g được liên k ế t với m ộ t th ể loại cụ th ể bằng
kh ó a ch ín h của g en re (từ b ảng G) và với m ột tác g iả cụ th ể qua kh ó a chính của au th o r (từ b ả n g A)
B ăng cách dò th e o nhữ ng kh ó a n ày đi đến các 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ả và th ể loại cho m ộ t cuốn sách
cụ thể Ví du, cú th ể tliây vằng tựa đề "The Shin.ing" được v iế t bởi "Stephon ĩliiig" và thuộc về 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" đ ã v iết hai cuôn sách "The Overlook'
v à "Trunk Music"
N hững mố.l quaii hệ n(iư vậy được thấy trong ỉiình 7.2 tạo nen n éii tả n g của m ột hệ th ố n g cơ sd dử liệu quan hệ Liẻn k ế t các b ảng sử dụng các khóa ngoại cũng hiệu quả hơn lựa chọn khác: tro n g k h i tạ o m ột b ản g mọi thứ
ngoại trừ bồn rửa n h à bếp để chứa tấ t cả 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 n hư vậy luôn là m ột tiế n tr ìn h th ủ cóng (và dễ sai sót) để tìm mọi trư ờ ng hợp của m ột giá trị cụ th ể v à th a y t h ế nó b ằn g m ột giá trị mới P h â n ch ia th ô n g tin th à n h các b ản g độc lậ p và liê n k ế t những
b ảng n ày b ằn g các k h ó a ngoại sẽ bảo đám rằ n g m ộ t m ẫu th ô n g tin cụ th ể
x u ất h iệ n m ột lầ n v à chỉ m ột lầ n tro n g cơ sở dữ liệu; điều này loại bỏ những
p h ần dư thừa, đơn giản hóa các th a y đổi (bằng việc cục bộ h ó a chúng sang
m ột vị trí) v à làm cho cơ sô dữ liệu gọn hơn và dễ q u ản lý hơn
T iến trìn h hợp lý hóa m ột cơ sd dữ liệu b ằn g việc d in h n g h ĩa v à thực th i các môi quan h ệ m ột đôi m ột và m ột đôi nhiều giữa các b ản g th à n h p hần của nó được gọi là sự chuẩn hóa cơ sớ dữ liẹu (d ata b ase norm alization) và
nó là m ột tá c vụ ch ín h m à m ột kỹ sư cơ sở dữ liệu p h ả i đối m ậ t k h i tạo m ột
cơ sd dữ liệu mới T rong tiế n trìn h chuẩn hóa, kỹ sư cơ sở dữ liệu cũng n h ận dạng các mô'i qu an hệ chéo v à những sự phụ thuộc k h ô n g ch ín h xác giữa các bảng và tối ưu hóa việc tổ chức dữ liệu sao cho các query SQL thực th i 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 cơ
sở dữ liệu được chuẩn hóa; những dạng chuẩn n ày cung cấp n h ữ n g hướng dẫn hữu dụng đ ể giúp bảo đảm việc th iế t k ế cơ sở dữ liệu vừa n h ấ t quán về cấu trúc vừa hiệu quả
1 2 C h ư d n g 7: Làm việ c v ò i c á c c d sò dữ liệu và SQ L
www.lib.haui.edu.vn
- www.lib.haui.edu.vn
- www.lib.haui.edu.vn
- www.lib.haui.edu.vn
- www.lib.haui.edu.vn