Nm vn chung v c s d liu trên PHP
Mc : Trung bình
Jack Herrington, Tng biên tp, Code Generation Network
08 01 2010
Hãy khám phá nm vn v c s d liu ph bin xy ra trong các ng dng PHP -- gm thit k lc
c s d liu, truy cp c s d liu và mã logic nghip v s dng c s d liu -- cng nh các gii
pháp ca chúng.
Nu ch có mt cách s dng c s d liu chính xác ...
Bn có th to thit k c s d liu, truy cp c s d liu và mã logic nghip v PHP t trên u trang ca nó theo
mt s cách nào ó và bn thng kt thúc khi nhn thy nó sai. Bài vit này minh ha nm vn thng gp trong
vic thit k c s d liu, trong mã PHP truy cp các c s d liu và cách sa cha nhng vn này khi bn bt
gp chúng.
Vn 1: S dng MySQL trc tip
Khi s dùng các hàm
mysql_
truy cp trc tip vào c s d liu có mt vn ph bin là mã PHP ã c. Lit kê
1 ch ra cách truy cp trc tip vào c s d liu.
Lit kê 1. Access/get.phpHãy lu ý vic s dng hàm
mysql_connect
truy cp vào c s d liu. Cng chú ý truy vn trong ó có dùng s
liên kt chu i b sung tham s
$name
vào truy vn ó.
Page 1 of 10Nm vn chung v c s d liu trên PHP
Chú ý r(ng tt c các cp trc tip ca MySQL ã di&n ra, tr# chu i kt ni c s d liu trong
$dsn
. Ngoài ra,
chúng ta s dng bin
$name
trong SQL thông qua toán t
?
. Sau ó, d liu v"i truy vn này c gi i thông qua
array
cui phng thc
query()
.
Vn 2: Không s dng chc nng tng t ng
Ging nh hu ht các c s d liu hin i, MySQL có kh nng to các trình nhn dng (identifier) duy nht tng t
ng trên mt c s cho m i bn ghi. Mc dù vy, chúng ta v)n thy mã ln u tiên chy mt lnh
SELECT
tìm mã
nhn dng (
id
) ti a, sau ó b sung thêm mt vào
id
ó, cng nh mt bn ghi m"i. Lit kê 3 cho thy mt lc
6
7)*='>8%$@($A@#'#!
&)$>'$'>8%$
+$7@B+@C'
'$A'
'$A'
!
@C#$)'@C'*D>%B$#E45!
@C#$)'@C'*D>%B$#F4!
@C#$)'@C'*D>%B$#E4!
"78."!
!
9::9 ;:!
<7899&!
=$>)99$?6+!2
?6"#$%$&'G()*+"!
!
?6@ /01!2
HE!
?6"@C#$)'@C'*D>%B$#"!
?6G!
id
.
Nhng thay i này cho phép tng mt chút tc . Lit kê 6 cho thy mã PHP ã cp nht, mã này chèn users (nhng
ngi dùng) vào bng.
Lit kê 6. Add_user_good.phpThay vì nhn c giá tr%
id
ti a, tôi bây gi ch cn s dng câu lnh
INSERT
chèn d liu, sau ó s dng mt
câu lnh
SELECT
ly
id
ca bn ghi v#a m"i c chèn vào. Mã này n gin hn nhiu và hiu qu hn so v"i
phiên bn gc và lc liên quan ca nó.
Mt la chn khác i v"i chc nng tng t ng ca MySQL là s dng phng thc
nextId()
trong h thng
PEAR DB. Trong trng hp ca MySQL, iu này to ra mt bng tun t m"i và qun lý vic s dng mt c ch
khóa phc tp. Li th ca vic s dng phng thc này là nó s* hot ng trên các h thng c s d liu khác.
Dù b(ng cách nào, bn nên s dng mt h thng qun lý s tng các ID duy nht cho bn và không da vào h thng
mà bn truy vn u tiên, sau ó tng giá tr% ca chính bn và thêm bn ghi. Cách tip cn th hai d& b% nh hng
theo các iu kin ganh ua trên các trang có khi lng cao.
4!
3!
4!
3!
6
Page 3 of 10Nm vn chung v c s d liu trên PHP
Vn 3: S dng nhiu c s d liu
Mt khi chúng ta thy ng dng mà m i bng trong mt c s d liu riêng bit. Có nhiu lý do thc hin iu ó
trong các c s d liu rt l"n, nhng i v"i ng dng trung bình, bn không cn mc phân on này. Ngoài ra, mc
dù có th thc hin các truy vn liên quan trên nhiu c s d liu, tôi rt khuyên bn chng li nó. Cú pháp phc tp
hn. Qun lý sao lu và khôi phc li không d& dàng. Cú pháp có th hoc không th làm vic gia các máy c s d
liu khác nhau. Và tht khó khn tip tc theo cu trúc quan h khi các bng c chia trên nhiu c s d liu.
Vì vy, nhiu c s d liu s* ging th nào? + bt u, bn cn mt s d liu. Lit kê 7 cho thy d liu này c
chia thành bn tp.
Lit kê 7. Các tp c s d liu Trong phiên bn nhiu c s d liu ca các tp này, bn s* np câu lnh SQL vào trong mt c s d liu, sau ó np
các câu lnh SQL
users
(nhng ngi s dng) vào c s d liu khác. Mã PHP truy vn c s d liu cho các tp
này liên kt v"i ngi dùng c th c hin th% d"i ây.
Lit kê 8. Getfiles.php
@C#$)'@C'*D>%B$#F4!
"78."!
9::9 ;:E!
<7899&!
=$>)99$?6+!2
?6"#$%$&'()*+,-$)$"
!
!
?6@ /01!2
!
2
!
!
9::9 ;:F!
<7899&!
=$>)99$?6+!2
Page 4 of 10Nm vn chung v c s d liu trên PHP
!
?6@ /1 !2
!
2
45!
3!
6
"78."!
!
9::9 ;:!
<7899&!
=$>)99$?6+!2
?6
"#$%$&'.K()*+,-$)$
.>C7.."
!
?6@ /1 !2
!
2