SlideShare a Scribd company logo
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
1
Ban chØ ®¹o c«ng nghÖ th«ng tin cña c¬ quan ®¶ng
***
TµI liÖu tham kh¶o
Ng«n ng÷ lËp tr×nh pHP
Hµ néi, 2003
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
2
PhÇn I : Giíi thiÖu ng«n ng÷ lËp tr×nh PHP
ch−¬ng i : Ng«n ng÷ lËp tr×nh pHP
I. Giíi thiÖu PHP vµ m«i tr−êng lËp tr×nh web.
1. PHP lµ g× ?
C¸i tªn PHP ban ®Çu ®−îc viÕt t¾t bëi côm tõ Personal Home Page, vµ
®−îc ph¸t triÓn tõ n¨m 1994 bëi Rasmus Lerdorf. Lóc ®Çu chØ lµ mét bé ®Æc
t¶ Perl, ®−îc sö dông ®Ó l−u dÊu vÕt ng−êi dïng trªn c¸c trang web. Sau ®ã,
Rasmus Lerdorf ®· ph¸t triÓn PHP nh− lµ mét m¸y ®Æc t¶ (Scripting engine).
Vµo gi÷a n¨m 1997, PHP ®· ®−îc ph¸t triÓn nhanh chãng trong sù yªu thÝch
cña nhiÒu ng−êi. PHP ®· kh«ng cßn lµ mét dù ¸n c¸ nh©n cña Rasmus
Lerdorf vµ ®· trë thµnh mét c«ng nghÖ web quan träng. Zeev Suraski vµ
Andi Gutmans ®· hoµn thiÖn viÖc ph©n tÝch có ph¸p cho ng«n ng÷ ®Ó råi
th¸ng 6 n¨m 1998, PHP3 ®· ra ®êi (phiªn b¶n nµy cã phÇn më réng lµ
*.php3). Cho ®Õn tËn thêi ®iÓm ®ã, PHP ch−a mét lÇn ®−îc ph¸t triÓn chÝnh
thøc, mét yªu cÇu viÕt l¹i bé ®Æc t¶ ®−îc ®−a ra, ngay sau ®ã PHP4 ra ®êi
(phiªn b¶n nµy cã phÇn më réng kh«ng ph¶i lµ *.php4 mµ lµ *.php). PHP4
nhanh h¬n so víi PHP3 rÊt nhiÒu. PHP b©y giê ®−îc gäi lµ PHP Hypertext
PreProcesor.
2. T¹i sao ph¶i sö dông PHP
Nh− chóng ta ®· biÕt, cã rÊt nhiÒu trang web ®−îc x©y dùng bëi ng«n
ng÷ HTML (HyperText Markup Language). §©y chØ lµ nh÷ng trang web
tÜnh, nghÜa lµ chóng chØ chøa ®ùng mét néi dung cô thÓ víi nh÷ng dßng v¨n
b¶n ®¬n thuÇn, h×nh ¶nh ,vµ cã thÓ ®−îc sù hç trî bëi ng«n ng÷ JavaScript,
hoÆc Java Apple. Nh÷ng trang web nh− vËy ng−êi ta th−êng gäi lµ client-
side. Tuy nhiªn, Internet vµ Intranets ®· ®−îc sö dông cho c¸c øng dông cÇn
tíi c¬ së d÷ liÖu. C¸c trang øng dông nh− vËy ®−îc gäi lµ trang web ®éng,
bëi v× néi dung cña chóng lu«n thay ®æi tïy thuéc vµo d÷ liÖu vµ ng−êi sö
dông. PHP lµ ng«n ng÷ lµm ®−îc nh÷ng ®iÒu nh− vËy. B»ng c¸ch ch¹y
ch−¬ng tr×nh PHP trªn m¸y chñ Web server, b¹n cã thÓ t¹o ra c¸c øng dông
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
3
cã sù t−¬ng t¸c víi c¬ së d÷ liÖu ®Ó t¹o ra nh÷ng trang web vµ ®©y ®−îc gäi
lµ trang web ®éng.
Chóng ta h·y xem xÐt c¸ch ho¹t ®éng
cña trang web ®−îc viÕt b»ng ng«n ng÷ HTML
vµ PHP nh− thÕ nµo.
Víi c¸c trang HTML :
Khi cã yªu cÇu tíi mét trang web tõ
phÝa ng−êi sö dông (browser). Web server
thùc hiÖu ba b−íc sau :
+ §äc yªu cÇu tõ phÝa browser,
+ T×m trang web trªn server.
+ Göi trang web ®ã trë l¹i cho
browser (nÕu t×m thÊy)
qua m¹ng Internet hoÆc Intranet .
Víi c¸c trang PHP :
Kh¸c víi c¸c trang HTML, khi mét trang PHP ®−îc yªu cÇu, web
server ph©n tÝch vµ thi hµnh c¸c ®o¹n m· PHP
®Ó t¹o ra trang HTML.
§iÒu ®ã ®−îc thÓ hiÖn b»ng bèn b−íc sau :
+ §äc yªu cÇu tö phÝa browser.
+ T×m trang web trªn server.
+ Thùc hiÖn c¸c ®o¹n m· PHP trªn trang web ®ã ®Ó söa
®æi néi dung cña trang.
+ Göi trë l¹i néi dung cho browser (®©y lµ trang HTML
cã thÓ hiÓn thÞ ®−îc bëi tr×nh duyÖt Internet Explorer
hoÆc tr×nh duyÖt nµo ®ã).
Tãm l¹i, sù kh¸c nhau gi÷a HTML vµ PHP
lµ HTML kh«ng ®−îc thùc hiÖn trªn m¸y
chñ Web server cßn c¸c trang *.php
viÕt b»ng c¸c ®o¹n m· PHP ®−îc thùc hiÖn
trªn m¸y chñ Web server do ®ã nã linh ®éng vµ mÒm dÎo h¬n .
Trang html
Web server
+ Đọc yêu cầu từ browser
+ Tìm file.htm trên server
+ Gửi lại cả file.htm cho browser
Request
http://domain/file.htm
Web server
+ Đọc yêu cầu từ browser
+ Tìm trang web(file.php) trên server
+ Thực hiện các đoạn mã PHP
+ Gửi trả lại nội dung cho browser
Request
http://domain/file.php
Kết xuất
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
4
3. Nh÷ng ®iÓm m¹nh cña PHP
-PHP thùc hiÖn víi tèc ®é rÊt nhanh vµ hiÖu qu¶ .Mét Server b×nh th−êng
cã thÓ ®¸p øng ®−îc hµng triÖu truy cËp tíi trong mét ngµy.
PHP hç trî kÕt nèi tíi rÊt nhiÒu hÖ CSDL kh¸c nhau:
PostgreSQL,mSQL,Oracle, dbm, filePro ,Hyperware, informix,InterBase,
Sybase, ... Ngoµi ra cßn hç trî kÕt nèi víi ODBC th«ng qua ®ã cã thÓ kÕt
nèi víi nhiÒu ng«n ng÷ kh¸c mµ ODBC hç trî.
-PHP cung cÊp mét hÖ thèng th− viÖn phong phó : Do PHP ngay tõ ®Çu
®−îc thiÕt kÕ nh»m môc ®Ých x©y dùng vµ ph¸t triÓn c¸c øng dông trªn
web nªn PHP cung cÊp rÊt nhiÒu hµm x©y dùng s½n gióp thùc hiÖn c¸c
c«ng viÖc rÊt dÔ dµng : göi, nhËn mail ,lµm viÖc víi c¸c cookie, vµ nhiÒu
thø kh¸c n÷a .
-PHP lµ mét ng«n ng÷ rÊt dÔ dïng, dÔ häc vµ ®¬n gi¶n h¬n nhiÒu so víi
c¸c ng«n ng÷ kh¸c nh− Perl, Java. NÕu b¹n ®· biÕt ng«n ng÷ C th× mäi
viÖc sÏ hoµn toµn thuËn lîi .
-PHP cã thÓ sö dông ®−îc trªn nhiÒu hÖ ®iÒu hµnh, chóng ta cã thÓ viÕt
chóng trªn Unix, Lunix vµ c¸c phiªn b¶n cña Windows. Vµ cã thÓ ®em
m· PHP nµy ch¹y trªn c¸c hÖ ®iÒu hµnh kh¸c mµ kh«ng ph¶i söa ®æi l¹i
m·.
-PHP lµ ng«n ng÷ m· nguån më.
II. BiÕn, h»ng sè vµ kiÓu d÷ liÖu trong PHP.
1. KiÓu d÷ liªu .
PHP cã ba kiÓu d÷ liÖu c¬ b¶n : interger, double vµ string. Ngoµi ra cßn
cã c¸c kiÓu d÷ liÖu kh¸c (nh−ng kh«ng ph¶i c¸c kiÓu d÷ liÖu c¬ b¶n) nh−
arrays (c¸c kiÓu d÷ liÖu m¶ng), objects (c¸c kiÓu d÷ liÖu ®èi t−îng).
Interger lµ kiÓu chiÕm 4 byte bé nhí ,gi¸ trÞ cña nã trong kho¶ng –2 tû
tíi + 2 tû. KiÓu Double lµ kiÓu sè thùc ,ph¹m vi biÓu diÔn ± (10-308
÷ 10308
).
KiÓu string dïng ®Ó chøa c¸c gi¸ trÞ bao gåm c¸c ký tù vµ con sè .
VÝ dô : 2 // ®©y lµ kiÓu interger
1.0 // ®©y lµ kiÓu double
“2” // ®©y lµ kiÓu string
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
5
“2 hours” // ®©y lµ mét kiÓu string kh¸c
2. H»ng sè
H»ng sè lµ nh÷ng gi¸ trÞ kh«ng ®æi. Chóng ta th−êng dïng h»ng sè ®Ó
l−u c¸c gi¸ trÞ kh«ng ®æi trong suèt ch−¬ng tr×nh nh− : nhiÖt ®é (00
C), c¸c gi¸
trÞ thêi gian chØ sù chuyÓn giao gi÷a s¸ng ,ch−a ,chiÒu ,tèi ...
a. Khai b¸o h»ng sè :
Ta dïng hµm define() ®Ó khai b¸o h»ng sè :
define(“COMPANY”, “Phop’s Bicycles”);
define(“YELLOW”, “#FFFF00”);
define(“VERSION”, 4);
define(“NL”, “<BR>n”);
Trong vÝ dô trªn chóng ta ®· dïng hµm define() ®Ó khai b¸o h»ng sè
NL. H»ng sè nµy lµ mét thÎ ng¾t dßng trong HTML.
Chóng ta sÏ sö dông c¸c h»ng sè trong PHP nh− sau :
echo (“Employment at ”. COMPANY. NL);
C¸ch viÕt trªn còng gièng nh− c¸c viÕt sau:
echo (“Employment at Phop’s Bicycles<BR>n”);
Chó ý : h»ng sè ph¶i ë ngoµi hai dÊu “ vµ ”. Trêng hîp sau lµ kh«ng cã
hiÖu lùc : echo (“Employment at COMPANY NL”);. Khi thùc hiÖn nã sÏ cho
kÕt qu¶ lµ : “Employment at COMPANY NL”.
Hµm defined() : hµm nµy dïng ®Ó kiÓm tra xem mét h»ng sè nµo ®ã
®· ®−îc khai b¸o ch−a.
VÝ dô : if ( defined (“YELLOW”)) {
echo (“<BODY BGCOLOR=”. YELLOW. “>n”);
}
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
6
b. C¸c h»ng sè ®· ®−îc ®Þnh nghÜa trong PHP (Built-in Constants):
§Ó hç trî cho ng−êi lËp tr×nh, PHP cung cÊp s½n c¸c h»ng sè nh− : c¸c
biÕn m«i trêng, c¸c biÕn cña Web server Apache ... Ngêi lËp tr×nh cã thÓ sö
dông hµm phpinfo() ®Ó xem c¸c gi¸ trÞ nµy.
<HTML>
<!—phpinfo() -->
<BODY>
<?php phpinfo(); ?>
</BOCY>
</HTML>
+ H»ng sè nguyªn : ®©y lµ nh÷ng gi¸ trÞ cã kiÓu integer. VÝ dô : 10
+ H»ng sè thùc: ®©y lµ nh÷ng gi¸ trÞ cã kiÓu double. VÝ dô : 10.00
+ H¾ng ký tù : ®©y lµ mét x©u ký tù ®Æt trong dÊu ngoÆc ®¬n hoÆc
kÐp.
VÝ dô : “Ng«n ng÷ lËp tr×nh PHP”.
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
7
3. BiÕn vµ gi¸ trÞ logic.
+ Còng gièng víi C/C++, PHP kh«ng cã kh¸i niÖm TRUE vµ FALSE.
C¸c gi¸ trÞ TRUE ®−îc hiÓu lµ nh÷ng gi¸ trÞ b»ng 1 vµ gi¸ trÞ FALSE lµ
nh÷ng gi¸ trÞ b»ng 0 hoÆc x©u rçng .
+ Khi sö dông biÕn chóng ta kh«ng cÇn khai b¸o kiÓu .
VÝ dô : $a = 1; // $a lµ mét biÕn kiÓu integer.
$a = 1.2; // b©y giê $a lµ mét biÕn kiÓu double.
$a = “A” ; // b©y giê $a l¹i lµ mét biÕn kiÓu string.
+ NÕu nh− thùc hiÖn phÐp to¸n gi÷a biÕn cã kiÓu sè vµ kiÓu string,
PHP sÏ coi chuçi lµ mét d·y sè nh− sau :
$str = “222B Baker Street”;
Ta thÊy biÕn $str cã gi¸ trÞ kiÓu string, vµ nÕu céng sè 3 víi gi¸ trÞ nµy
th× :
$x = 3 + $str ; // $x = 225
khi ®ã biÕn $x nhËn ®−îc gi¸ trÞ 255 v× PHP ®· céng 3 víi ba sè ®Çu.
Nhng nÕu ta in gi¸ trÞ cña biÕn $str th×
echo ($str); // print : “222B Baker Street”
Chó ý r»ng c¸c phÐp to¸n gi÷a sè vµ chuçi chØ ®óng khi ký tù ®Çu cña
chuçi lµ sè .
+ Ta còng cã thÓ lµm thay ®æi kiÓu gi¸ trÞ cña mét biÕn b»ng c¸ch Ðp
kiÓu
$a = 11.2; // biÕn $a cã kiÓu double
$a = (int) $a; // b©y giê $a cã kiÓu integer ,gi¸ trÞ lµ 11
$a = (double) $a; // b©y giê $a l¹i cã kiÓu double, gi¸ trÞ lµ 11.0
$b = (string) $a ; // biÕn $b cã kiÓu string ,gi¸ trÞ lµ “11”
Còng ph¶i biÕt r»ng PHP tù ®éng chuyÓn ®æi kiÓu rÊt tèt. NÕu thËt sù
cÇn thiÕt chóng ta míi ph¶i dïng c¸ch trªn.
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
8
+ C¸c hµm lµm viÖc víi biÕn
gettype() : hµm nµy tr¶ l¹i kiÓu cña mét biÕn nµo ®ã. Gi¸ trÞ tr¶ vÒ cã
thÓ lµ : “integer”
“double”
“string”
“array”
“object”
“class”
“unknown type”
vÝ dô :
if (gettype($user_input) == “integer”)
{
$age = $user_input;
}
settype() : hµm nµy Ðp kiÓu cho mét biÕn nµo ®ã. NÕu thµnh c«ng
hµm tr¶ vÒ gi¸ trÞ 1 (true) ,ng−îc l¹i lµ 0 (false).
vÝ du :
$a = 7.5;
settype($a, “integer”);
if (settype($a, “array”)){
echo (“Conversion succeeded. ”);
}else{
echo (“Conversion error. ”);
}
isset() vµ unset() : Hµm isset() kiÓm tra mét biÕn ®· ®−îc g¸n gi¸ trÞ
hay ch−a, hµm unset() sÏ gi¶i phãng bé nhí cho mét biÕn nµo ®ã .
vÝ dô :
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
9
$id = “323bb”;
if (isset($id)) {
echo (“D÷ liÖu ®· ®−îc g¸n”);
}else{
echo (“D÷ liÖu ch−a ®−îc g¸n”);
}
unset($id);
if(!isset($id)) {
echo (“D÷ liÖu ®· ®−îc gi¶i phãng”);
}
empty() : Còng gièng hµm isset(), hµm empty() sÏ tr¶ vÒ gi¸ trÞ 1
(true) nÕu mét biÕn lµ rçng vµ ng−îc l¹i 0 (false). §èi víi biÕn cã kiÓu sè
gi¸ trÞ b»ng 0 ®−îc coi lµ rçng, biÕn kiÓu string ®−îc coi lµ rçng nÕu x©u lµ
x©u rçng.
vÝ dô:
echo empty($new) ; // true
$new = 1;
echo empty($new); // false
$new = “”;
echo empty($new); // true
$new = 0;
echo empty($new); // true
$new = “So 323”;
echo empty($new); // false
unset($new);
echo empty($new); // true
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
10
III. C¸c to¸n tö
+ B¶ng c¸c phÐp to¸n sè häc
PhÐp to¸n ý nghÜa VÝ dô Gi¶i thÝch
+
-
*
/
%
PhÐp céng
PhÐp trõ
PhÐp nh©n
PhÐp chia
Chia d
7 + 2
7 – 2
7 * 2
7 / 2
7 % 2
Thùc hiÖn phÐp céng gi÷a 7 vµ 2 : 9
Thùc hiÖn phÐp trõ gi÷a 7 vµ 2 : 5
Thùc hiÖn phÐp nh©n gi÷a 7 vµ 2 : 14
Thùc hiÖn phÐp chia gi÷a 7 vµ 2 : 3.5
Thùc hiÖn phÐp chia d gi÷a 7 vµ 2 : 1
Ta cã thÓ viÕt c¸c phÐp to¸n ng¾n gän nh− b¶ng sau :
Khi viÕt T−¬ng ®−¬ng víi
$h += $i
$h -= $i
$h *= $i
$h /= $i
$h %= $i
$h = $h + $i
$h = $h - $i
$h = $h * $i
$h = $h / $i
$h = $h % $i
+ PhÐp g¸n :
vÝ dô :
$x = 1;
$y = $x + 1;
$length = $area / $width;
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
11
+ B¶ng c¸c phÐp to¸n quan hÖ
PhÐp
to¸n
ý nghÜa VÝ dô Gi¶i thich
==
<
>
<=
>=
!=
<>
So s¸nh b»ng
So s¸nh nhá h¬n
So s¸nh lín h¬n
Nhá h¬n hoÆc
b»ng
Lín h¬n hoÆc
b»ng
So s¸nh kh¸c
So s¸nh kh¸c
$h ==
$i
$h < $i
$h > $i
$h <=
$i
$h =>
$i
$h != $i
$h <>
$i
KiÓm tra $h vµ $i cã b»ng nhau
kh«ng
KiÓm tra $h cã nhá h¬n $i kh«ng
KiÓm tra $h cã lín h¬n $i kh«ng
KiÓm tra $h cã nhë h¬n hoÆc b»ng $i
KiÓm tra $h cã lín h¬n hoÆc b»ng $i
KiÓm tra $h cã kh¸c $i kh«ng
KiÓm tra $h cã kh¸c $i kh«ng
C¸c phÐp so s¸nh th−êng dïng kiÓm tra ®iÒu kiÖn trong c¸c c©u lÖnh
®iÒu khiÓn mµ ta sÏ häc ë bµi sau .
+ B¶ng c¸c phÐp to¸n logic
PhÐp to¸n logic cïng víi to¸n h¹ng t¹o thµnh biÓu thøc logic. BiÓu thøc
logic cã thÓ cã gi¸ trÞ lµ 1 (true) hoÆc 0 (false) .
To¸n h¹ng a To¸n h¹ng b a && b a || b !a !b
1
1
0
0
1
0
1
0
1
0
0
0
1
1
1
0
0
0
1
1
0
1
0
1
+ C¸c phÐp to¸n víi biÕn kiÓu string .
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
12
Ta sö dông dÊu “. “ ®Ó ghÐp hai biÕn kiÓu string víi nhau .
vÝ dô : $first = “Phineas”;
$last = “Phop”;
$full = $first. “ ”. $last; // $full = “Phineas Phop” ;
echo ($full);
Ta cã thÓ ghÐp hai x©u nh− sau:
echo ($last. “’s Bicycles”); //print : Phop’s Bicycles
§Ó cã thÓ chÌn mét biÕn vµo trong hµng cã kiÓu string th× tªn biÕn
ph¶i ®Ó trong dÊu ®ãng më ngoÆc nhän.
echo (“${last}’s Bicycles”);
+ C¸c phÐp to¸n thao t¸c møc bit.
C¸c phÐp to¸n thao t¸c møc bit t¸c ®éng lªn tõng bit cña to¸n h¹ng .
Ký hiÖu ý nghÜa
&
|
^
AND bit
OR bit
XOR bit
B¶ng c¸c phÐp to¸n nh− sau :
& KÕt qu¶ | KÕt qu¶ ^ KÕt qu¶
1&1
1&0
0&1
0&0
1
0
0
0
1 | 1
1 | 0
0 | 1
0 | 0
1
1
1
0
1^1
1^0
0^1
0^0
0
1
1
0
PHP còng hç trî c¸c phÐp dÞch ph¶i vµ dÞch tr¸i
>> : dÞch ph¶i
<< : dÞch tr¸i
Gi¶ sö $a lµ mét biÕn nguyªn th× phÐp to¸n : $a >> n lµm cho c¸c bit
trong $a bÞ dÞch ph¶i ®i n vÞ trÝ. T−¬ng tù ta cã phÐp dÞch tr¸i .
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
13
vÝ dô : 11 >> 2 = 2 ;
v× :
11 (1011)
>> 2
2 (0010)
+ C¸c phÐp to¸n t¨ng gi¶m :
- PhÐp t¨ng : phÐp t¨ng (to¸n tö t¨ng) t¨ng gi¸ trÞ cña to¸n h¹ng lªn
mét ®¬n vÞ.
$a ++ : $a ®−îc sö dông råi míi t¨ng
++ $a : $a t¨ng råi míi ®−îc sö dông
- PhÐp gi¶m : t−¬ng tù nh− phÐp t¨ng, kh¸c lµ gi¸ trÞ bÞ gi¶m ®i mét
®¬n vÞ.
$a -- : $a ®−îc sö dông råi míi gi¶m
-- $a : $a gi¶m råi míi ®−îc sö dông
vÝ dô :
$a = 10; // $a b»ng 10
$b = $a++ ; // $a b»ng 11 nh−ng $b b»ng 10
$a = 10; // $a b»ng 10
$b = -- $a ; // $a b»ng 9 vµ $b b»ng 9
+ PhÐp to¸n ®iÒu kiÖn. ? :
PhÐp to¸n ®iÒu kiÖn cïng víi to¸n h¹ng t¹o nªn biÓu thøc ®iÒu kiÖn.
Ta ký hiÖu e1 ,e2, e3 lµ ba to¸n h¹ng.
BiÓu thøc cã d¹ng : e1 ? e2 : e3
NÕu e1 != 0 th× gi¸ trÞ cña biÓu thøc ®iÒu kiÖn lµ e2
NÕu e1 == 0 th× gi¸ trÞ cña biÓu thøc ®iÒu kiÖn lµ e3
vÝ dô : t×m max
max = $a>$b ? a : b ;
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
14
+ To¸n tö sizeof (®èi t−îng) :
PhÐp to¸n sizeof cho biÕt kÝch th−íc (tÝnh b»ng byte ) « nhí mµ ®èi
t−îng chiÕm trong bé nhí. §èi t−îng ë ®©y cã kiÓu lµ integer, double,
string.
vÝ dô : $a = 10;
echo sizeof($a); //sÏ in ra mµn h×nh lµ : 4
IV. C¸c c©u lÖnh ®iÒu khiÓn
1. LÖnh if_else : ®©y lµ lÖnh rÏ nh¸nh cã ®iÒu kiÖn .
a. D¹ng 1 :
if ( biÓu thøc ) c©u lÖnh;
C©u lÖnh ë ®©y t−¬ng ®−¬ng víi mét khèi lÖnh. Mét khèi lÖnh ®−îc
®Æt trong dÊu ngoÆc kÐp.
ý nghÜa :
+ NÕu biÓu thøc kh¸c kh«ng ,th× c©u lÖnh ®−îc thùc hiÖn.
+ NÕu biÓu thøc b»ng kh«ng, th× c©u lÖnh kh«ng ®−îc thùc hiÖn
b. D¹ng 2 :
if ( biÓu thøc )
c©u lÖnh 1;
else
c©u lÖnh 2;
ý nghÜa :
+ NÕu biÓu thøc kh¸c kh«ng ,th× c©u lÖnh 1 ®−îc thùc hiÖn.
+ NÕu biÓu thøc b»ng kh«ng, th× c©u lÖnh 2 ®−îc thùc hiÖn
Chó ý :
* C©u lÖnh 1 ë d¹ng 2 lµ lÖnh if_else
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
15
+ NÕu l−îng else b»ng l−îng If th× else thuéc vÒ If gÇn nhÊt
theo tõng cÆp tõ trong ra ngoµi.
VÝ dô :
$a = 10; $b = 10;
$c = 3; $d = 3;
$e = 12; $f = 8;
if($a == $b)
if($c == $d)
if($e == $f)
$max = $e;
else
$max = $f;
else
$max = $d;
else
$max = $b
echo $max ; //printf max = 8
+ NÕu l−îng else Ýt h¬n l−îng If th× else thuéc vÒ If ngÇn nhÊt
theo tõng cÆp tõ trong ra ngoµi.
VÝ dô :
<?php
if ($a == $b)
if ($c == $d)
$max = 0
else
$max = $d;
?>
T−¬ng ®−¬ng víi :
<?php
if ($a == $b)
{ if ( $c == $d)
$max = 0;
}
else
$max = $b;
?>
* C©u lÖnh 2 cña d¹ng 2 lµ elseif :
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
16
B¾t nguån tõ :
if ( biÓu_thøc1 )
c©u_lÖnh 1;
else
if ( biÓu_thøc 2 )
c©u_lÖnh 2;
else
if ( biÓu_thøc 3 )
c©u_lÖnh 3;
...
else
if ( biÓu_thøc i )
c©u_lÖnh i;
...
else
c©u_lÖnh n;
Cã thÓ viÕt l¹i nh− sau:
if ( biÓu_thøc1 )
c©u_lÖnh 1;
elseif (biÓu_thøc 2)
c©u_lÖnh 2;
elseif (biÓu_thøc 3)
c©u_lÖnh 3;
...
elseif (biÓu_thøc i)
c©u_lÖnh i;
...
else
c©u_lÖnh n;
C©u lÖnh elseif t¹o ra lÖnh rÏ nh¸nh cã ®iÒu kiÖn trong ®ã thùc
hiÖn 1 trong n c¸ch kh¸c nhau.
- NÕu biÓu_thøc i kh¸c kh«ng (i = 1,..n-1) th× thùc hiÖn c©u
lÖnh i .
- NÕu biÓu_thøc i b»ng kh«ng (i = 1, ..n-1) th× c©u lÖnh thø
n ®−îc thùc hiÖn.
2. C©u lÖnh switch :
switch (biÓu_thøc n)
{
case n1:
c©u lÖnh 1;
break;
case n2:
c©u lÖnh 2;
break;
...
case nn:
c©u lÖnh nn;
[default: c©u lÖnh]
}
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
17
C©u lÖnh switch lµ c©u lÖnh rÏ nh¸nh cã ®iÒu kiÖn trong ®ã thùc
hiÖn mét trong n c¸i rÏ nh¸nh.
+NÕu biÓu_thøc n = ni (i = 1, .. n) th× c©u lÖnh sau case ni ®−îc
thùc hiÖn cho ®Õn khi gÆp lÖnh break hoÆc dÊu ngoÆc “}”
+NÕu biÓu_thøc n != mäi ni (i = 1, .. n) mµ cã nh¸nh Default th×
c¸c c©u lÖnh sau Default ®−îc thùc hiÖn.
VÝ dô :
<?php
$val = 6;
$a = 5;
$b = 6;
$d = 7;
switch ($val)
{
case $a :
echo (“five”);
break;
case $b :
echo (“six”);
break;
case $c :
echo (“seven”);
break;
default :
echo ($val);
}
?>
3. C©u lÖnh FOR:
D¹ng lÖnh : for (biÓu_thøc 1; biÓu_thøc 2; biÓu_thøc 3)
c©u lÖnh ;
LÖnh for lµ lÖnh t¹o chu tr×nh cã ®iÒu kiÖn.
B−íc 1 : tÝnh biÓu_thøc 1
B−íc 2 : tÝnh biÓu_thøc 2 :
NÕu biÓu_thøc 2 kh¸c 0 th× thùc hiÖn c©u lÖnh vµ sang b−íc 3.
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
18
NÕu biÓu_thøc 2 b»ng 0 th× kÕt thóc vßng for
B−íc 3 : tÝnh biÓu_thøc 3 vµ quay l¹i b−íc 2.
+ biÓu_thøc 1, biÓu_thøc 2, biÓu_thøc 3 lµ c¸c thµnh phÇn. Mçi thµnh
phÇn cã thÓ gåm nhiÒu biÓu thøc. Khi ®ã mçi biÓu thøc ®−îc viÕt c¸ch nhau
mét dÊu phÈy (“,”).
+C¸c biÓu thøc ®−îc tÝnh lÇn l−ît tõ tr¸i qua ph¶i
+BiÓu thøc trong biÓu_thøc 2 quyÕt ®Þnh thùc hiÖn th©n cña for.
VÝ dô :
<?php
for($i = 0; $j = 4,$i < $j; $i++,$j--)
{ echo (“i =”. $i. “ ,j = “. $j. “<br>”);
}
?>
+Cã thÓ v¾ng mÆt bÊt kÓ thµnh phÇn nµo. NÕu v¾ng mÆt biÓu_thøc 2
th× c©u lÖnh lu«n ®−îc thùc hiÖn. MÆc dï v¾ng mÆt vÉn ph¶i cã dÊu chÊm
phÈy (“;”)
VÝ dô :
<?php
for ( ; ; ) {
if (my_function() == “stop”) break;
}
?>
+NÕu v¾ng biÓu_thøc 1 vµ biÓu_thøc 3 th× :
for ( ; biÓu_thøc 2 ; ) cau_lenh ;
t−¬ng ®−¬ng víi :
while (biÓu_thøc 2) cau_lenh ;
4. C©u lÖnh WHILE
while (biÓu_thøc)
c©u lÖnh ;
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
19
LÖnh while lµ mét lÖnh t¹o chu tr×nh cã ®iÒu kiÖn. §iÒu kiÖn thùc hiÖn
®−îc kiÓm tra ë ®Çu chu tr×nh.
B−íc 1 : TÝnh biÓu thøc
NÕu biÓu thøc kh¸c kh«ng, sang b−íc 2
NÕu biÓu thøc b»ng kh«ng, kÕt thóc vßng while
B−íc 2 : Thùc hiÖn c©u lÖnh.
Quay l¹i b−íc 1.
Chó ý :
+ BiÓu thøc cã thÓ bao gåm nhiÒu biÓu thøc. Khi ®ã c¸c biÓu thøc ®−îc
viÕt c¸ch nhau mét dÊu phÈy ,vµ ®−îc tÝnh lÇn l−ît tõ tr¸i qua ph¶i. BiÓu
thøc cuèi cïng quyÕt ®Þnh thùc hiÖn c©u lÖnh.
+ Kh«ng ®−îc phÐp v¾ng mÆt biÓu thøc
+ §Ó t¹o chu tr×nh v« tËn th×
while(1)
{ ...
if (biÓu_thøc) break;
...
}
VÝ dô :
$i = 11;
while (--$i)
{ if (my_function($i) == “error”) {
break;
}
++ $number;
}
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
20
5. LÖnh DO ... WHILE
D¹ng lÖnh :
do {
c©u lÖnh;
}while (biÓu_thøc);
LÖnh do ... while lµ lÖnh t¹o chu tr×nh cã ®iÒu kiÖn, trong ®ã ®iÒu kiÖn
thùc hiÖn chu tr×nh ®−îc kiÓm tra ë cuèi chu tr×nh.
Ho¹t ®éng :
B−íc 1 : Thùc hiÖn c©u lÖnh
B−íc 2 : TÝnh biÓu thøc biÓu_thøc
+NÕu biÓu thøc biÓu_thøc kh¸c kh«ng th× quay l¹i b−íc 1
+NÕu biÓu thøc biÓu_thøc b»ng kh«ng th× kÕt thóc do ... while.
VÝ dô :
<?php
echo (“<SELECT name=’num’>n”);
$i = 0;
$total = 10;
do {
echo (“t <OPTION value=$i>$i</OPTION>n”);
}while(++ $i < $total);
echo (“</SELECT>n”);
?>
6. LÖnh break
Lµ lÖnh rÏ nh¸nh kh«ng ®iÒu kiÖn vµ th−êng dïng ®Ó ra khái th©n cña
switch, while, do ... while, for .
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
21
LÖnh break chØ cho phÐp tho¸t khái th©n c¸c lÖnh bªn trong nhÊt chøa
nã.
7. LÖnh continue
Lµ lÖnh rÏ nh¸nh kh«ng ®iÒu kiÖn .LÖnh th−êng dïng ®Ó b¾t ®Çu l¹i
mét chu tr×nh míi trong c¸c lÖnh for, while, do ... while mµ kh«ng cÇn thùc
hiÖn hÕt toµn bé th©n cña cña lÖnh t¹o chu tr×nh.
8. Khai b¸o tiÒn xö lý include vµ require .
§Ó sö dông c¸c ®o¹n m· ë bªn ngoµi, chóng ta cã thÓ sö dông khai
b¸o tiÒn xö lý include vµ require. Cho phÐp chóng ta x©y dùng c¸c hµm c¸c
h»ng sè, vµ bÊt kú ®o¹n m· nµo sau ®ã cã thÓ chÌn vµo c¸c ®o¹n script.
Require kh¸c include lµ, nã cã thÓ lµm thay ®æi néi dung cña trang hiÖn
t¹i khi biªn dÞch, c¸c trang nµy dïng ®Ó khai b¸o c¸c biÕn, c¸c h»ng sè
hay c¸c ®o¹n m· ®¬n gi¶n kh«ng cã vßng lÆp. Khi ®ã include cho phÐp
thùc hiÖn c¸c c©u lÖnh phøc t¹p – cã c©u lÖnh t¹o chu tr×nh. Nã chØ sö
dông c¸c hµm nh− nh÷ng hµm ngoµi cña ch−¬ng tr×nh.
V. Hµm trong PHP
1. Quy t¾c x©y dùng hµm
function tªn_hµm (danh s¸ch ®èi sè h×nh thøc) {
Th©n hµm .
}
+ §Þnh nghÜa hµm kh«ng nhÊt thiÕt ph¶i n»m ngoµi th©n mäi hµm,
trong hµm cã thÓ cã hµm kh¸c. Nh−ng viÖc sö dông mét hµm kh«ng kh¸c
nhau gi÷a x©y dùng hµm trong th©n mét hµm vµ ngoµi mäi hµm .
+ Tªn hµm tuú ®Æt vµ kh¸c tªn hµm chuÈn.
+ Hµm cã thÓ cã gi¸ trÞ tr¶ vÒ hoÆc kh«ng.
+ C¸c c©u lÖnh ®−îc quyÒn gäi bÊt kú hµm nµo ®· ®−îc khai b¸o vµ ®·
®−îc ®Þnh nghÜa.
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
22
+ Return : - Tr¶ mét gi¸ trÞ vÒ cho n¬i gäi hµm
- Lµ n¬i b¸o kÕt thóc hµm
2. Gäi hµm .
+ Hµm ph¶i ®−îc x©y dùng (khai b¸o) tr−íc khi gäi .
+ Khi gäi hµm, nÕu cã gi¸ trÞ tr¶ vÒ th−êng ®−îc ®Æt trong biÓu thøc .
3. BiÕn toµn cô vµ biÕn côc bé.
Th«ng th−êng PHP coi c¸c biÕn ®−îc sö dông trong th©n cña hµm lµ
biÕn côc bé. NghÜa lµ biÕn trong th©n hµm kh«ng lµm thay ®æi gi¸ trÞ cña
biÕn ë ngoµi hµm ®ã. Muèn hµm lµm thay ®æi gi¸ trÞ cña biÕn ngoµi ta cÇn
khai b¸o global tr−íc biÕn ®ã trong th©n hµm .
VÝ dô :
$position = “m”;
function change_pos()
{
$position = “s”;
}
change_pos();
echo (“$position”); //Prints “m”
Ta thÊy biÕn $position gi¸ trÞ kh«ng ®æi sau khi gäi hµm change_pos().
$position = “m”;
function change_pos()
{ global $position;
$position = “s”;
}
change_pos();
echo (“$position”); //Prints “s”
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
23
Ta cã thÓ viÕt nh− trªn hoÆc ta cã thÓ viÕt :
$position = “m”;
function change_pos()
{ GOLOBALS[$position] = “s”;
}
change_pos();
echo (“$position”); //Prints “s”
VI. BiÕn m¶ng trong PHP
1. M¶ng mét chiÒu
M¶ng lµ mét biÕn bao gåm nhiÒu phÇn tö cã cïng tªn nh−ng kh¸c
nhau vÒ chØ sè (c¸c chØ sè nµy t¨ng dÇn tõ 0 ®Õn n). Víi ng«n ng÷ lËp tr×nh
C, c¸c phÇn tö cña m¶ng cã cïng kiÓu d÷ liÖu ,nh−ng víi PHP th× mÒm dÎo
h¬n. C¸c phÇn tö cña m¶ng kh«ng nhÊt thiÕt ph¶i cïng kiÓu.
a. Khai b¸o m¶ng mét chiÒu.
Ta cã thÓ khai b¸o m¶ng b»ng c¸ch g¸n tªn m¶ng víi dÊu ®ãng më
ngoÆc vu«ng kh«ng cã chØ sè. Chóng ta h·y xÐt vÝ dô sau :
$countries[] = “cr”;
$countries[] = “de”;
$countries[] = “us”;
VÝ dô trªn t¹o ra mét m¶ng gåm ba phÇn tö cã chØ sè lµ 0, 1 vµ 2.
ViÖc ®ã còng t−¬ng tù nh− ta g¸n :
$countries[0] = “cr”;
$countries[1] = “de”;
$countries[2] = “us”;
Ngoµi ra c¸c chØ sè cña m¶ng kh«ng nhÊt thiÕt ph¶i t¨ng dÇn mµ cã thÓ
®−îc khai b¸o nh sau :
$countries[50] = “cr”;
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
24
$countries[20] = “de”;
$countries[10] = “us”;
echo (“$countries[20]”); // prints de
Khi ®ã ®Ó thªm mét phÇn tö míi vµo m¶ng chóng ta cã thÓ viÕt
$countries[] = “uk”; // chØ sè sÏ lµ 51
Mét phÇn tö míi ®−îc thªm vµo víi chØ sè lµ chØ sè lín nhÊt cña m¶ng
céng thªm mét. Ngoµi ra còng cã thÓ khai b¸o m¶ng mét chiÒu b»ng c©u
lÖnh array
$countries = array (“cr”, “de”, “us”) ;
echo (“$countries[2]”); //prints “us”
§Ó chØ sè kh«ng b¾t ®Çu tõ kh«ng ta cã thÓ khai b¸o l¹i nh− sau
$countries = array (1 => “cr”, “de”, “us”);
echo (“$countries[2]”); //prints “de”
To¸n tö => cã thÓ ®−îc sö dông tr−íc bÊt kú mét phÇn tö nµo trong
m¶ng
$countries = array (“cr”, 7 => “de”, “us”);
vµ khi ®ã phÇn tö cã gi¸ trÞ “cr” cã chØ sè lµ 0 cßn phÇn tö cã gi¸ trÞ
“de”, “us” lÇn l−ît lµ 7 vµ 8. Kh¸c víi ng«n ng÷ lËp tr×nh C, chØ sè cña m¶ng
mét chiÒu kh«ng chØ lµ c¸c sè nguyªn mµ cßn lµ x©u ký tù. Ta cã thÓ khai
b¸o nh− sau :
$countries[“ca”] = “Canada”;
$countries[“cr”] = “Costa Rica”;
$countries[“de”] = “Germany”;
$countries[“uk”] = “United Kingdom”;
$countries[“us”] = “United States”;
echo (“$countries[“ca”]); // print Canada
NÕu dïng array th× sÏ lµ :
$countries = (“ca” => “Canada”,
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
25
“cr” => “Costa Rica”,
“de” => “Germany”,
“uk” => “United Kingdom”,
“us” => “United States”);
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
26
b. Lµm viÖc víi c¸c phÇn tö cña m¶ng
Cã thÓ sö dông vßng lÆp for xÐt tõng phÇn tö cña m¶ng.
$countries = array (“cr”, “de”, “us”);
$num_elements = count($countries);
for ($i = 0 ; $i < $num_elements ; $i ++) {
echo (“$countries[$i] <BR>n”);
}
VÝ dô trªn sÏ ®óng khi chØ sè cña c¸c phÇn tö t¨ng dÇn ®Òu. NÕu chØ sè
c¸c phÇn tö kh«ng theo mét thø tù nµo c¶ ta cã thÓ sö dông hµm list() vµ
each().
reset ($countries);
while (list ($key, $value ) = each ($countries)) {
echo (“ChØ sè $key, gi¸ trÞ $value”);
}
§Ó di chuyÓn con trá tíi phÇn tö tiÕp theo hoÆc tr−íc ®ã ta còng cã thÓ
dïng hµm next() - hµm next() tr¶ vÒ lµ 1 (true) nÕu phÇn tö tiÕp theo
kh«ng ph¶i lµ phÇn tö cuèi cïng, ng−îc l¹i lµ 0 (false) vµ prev() - hµm
prev() cho gi¸ trÞ tr¶ vÒ lµ 1 (true) nÕu phÇn tö tiÕp theo kh«ng ph¶i lµ
phÇn tö ®Çu tiªn, ng−îc l¹i lµ 0 (false). Hµm key () sÏ cho biÕt chØ sè vµ
hµm current() sÏ cho biÕt gi¸ trÞ cña phÇn tö ®ã .
$arr = array (3, 4, 5, 6, 7);
do {
$k = key ($arr);
$val = current ($arr);
echo (“PhÇn tö $k = $val”);
}while
2. M¶ng hai chiÒu
Chóng ta cã thÓ khai b¸o m¶ng hai chiÒu nh− sau :
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
27
$countries = array (“Europs” => array (“de”, “uk”),
“North America” => array (“ca”, “cr”, “us”));
echo ($countries[“Europs”][1]); // print “uk”
echo ($countries[“North America”][2]); // print “us”
Ta cã cÊu tróc cña m¶ng trªn nh− sau :
$countries[“Europs”] $countries[“North America”]
[0] [1] [0] [1] [2]
“de” “uk” “ca” “cr” “us”
Còng gièng nh− m¶ng mét chiÒu ta sÏ dïng vßng lÆp nh− for, while, do
... while ®Ó duyÖt qua c¸c phÇn tö cña m¶ng.
VÝ dô :
$countries = array (“Europs” => array (“de”, “uk”),
“North America” => array (“ca”, “cr”, “us”));
while (list ($key1) = each ($countries)) {
echo (“$key1 : <BR>n”);
while (list ($key2, $val) = each($countries[“$key1”])) {
echo (“ - $val <BR>n”)
}
}
Khi ch¹y ch−¬ng tr×nh sÏ in ra mµn h×nh lµ :
Europ :
- de
- uk
North America :
- ca
- cr
- us
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
28
3. C¸c hµm s¾p xÕp m¶ng .
PHP cung cÊp cho chóng ta c¸c hµm ®Ó s¾p xÕp m¶ng. Víi mçi lo¹i
m¶ng sÏ cã mét hµm t−¬ng øng. Víi m¶ng cã chØ sè lµ kiÓu nguyªn chóng ta
cã hµm sort() ®Ó s¾p xÕp t¨ng dÇn c¸c phÇn tö cña m¶ng, hµm rsort() sÏ s¾p
xÕp c¸c phÇn tö cña m¶ng gi¶m dÇn .
$countries = array (“us”, “uk”, “ca”, “cr”, “de”);
sort ($countries);
while (list ($key, $val) = each ($countries)) {
echo (“Element $key equals $val <BR>n”);
}
Khi ch¹y ch−¬ng tr×nh sÏ lµ :
Element 0 equals ca
Element 1 equals cr
Element 2 equals de
Element 3 equals uk
Element 4 equals us
Víi m¶ng chØ sè cã kiÓu string th× dïng hµm asort (), arsort () ®Ó s¾p
xÕp m¶ng theo chiÒu t¨ng dÇn vµ gi¶m dÇn. NÕu b¹n dïng c¸c hµm sort() vµ
rsort() th× c¸c chØ sè cã kiÓu string sÏ chuyÓn thµnh c¸c chØ sè cã kiÓu
nguyªn.
$countries = array(“us” => “United States”,
“uk” => “United Kingdom”,
“ca” => “Canada”,
“cr” => “Costa Rica”,
“de” => “Germany”);
asort ($countries);
while (list($key, $val) = each($countries)) {
echo “Chi so $key bang $val <BR>n”;
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
29
}
KÕt qu¶ khi ch¹y ch−¬ng tr×nh :
Chi so ca bang Canada
Chi so cr bang Costa Rica
Chi so de bang Germany
Chi so uk bang United Kingdom
Chi so us bang United States
Nh−ng nÕu thay dßng asort ($countries); b»ng sort ($countries); kÕt
qu¶ sÏ lµ
Chi so 0 bang Canada
Chi so 1 bang Costa Rica
Chi so 2 bang Germany
Chi so 3 bang United Kingdom
Chi so 4 bang United States
§Ó s¾p xÕp m¶ng t¨ng dÇn hay gi¶m dÇn theo chØ sè chóng ta cã hµm
ksort() – t¨ng dÇn vµ krsort() – gi¶m dÇn .
$countries = array(“e” => “United States”,
“d” => “United Kingdom”,
“c” => “Canada”,
“b” => “Costa Rica”,
“a” => “Germany”);
ksort ($countries);
while (list($key, $val) = each($countries)) {
echo “Chi so $key bang $val <BR>n”;
}
KÕt qu¶ :
Chi so a bang Germany
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
30
Chi so b bang Costa Rica
Chi so c bang Canada
Chi so d bang United Kingdom
Chi so e bang United States
VII. LËp tr×nh h−íng ®èi t−îng (OOP)
1. §Þnh nghÜa líp .
Chóng ta cã thÓ ®Þnh nghÜa líp b»ng to¸n tö class, vµ trong mçi mét
líp chóng ta sÏ x©y dông c¸c ph−¬ng thøc vµ thuéc tÝnh cho líp ®ã .
Gi¶ sö muèn ®Þnh nghÜa líp “Sesssion” chóng ta lµm nh− sau :
<?php
class Session
{
// §Þnh nghÜa c¸c thuéc tÝnh vµ ph−¬ng thøc
// X©y dùng c¸c ph−¬ng thøc cho líp
} // KÕt thóc mét líp
?>
§Ó ®Þnh nghÜa thuéc tÝnh cho líp chóng ta ®Æt tõ kho¸ var tr−íc thuéc
tÝnh ®ã.
<?
class Session
{
var $sqlhost = “localhost”;
var $sqluser = “root”;
var $sqlpass = “password”;
var $sqldb = “session”;
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
31
var $linkid;
var $seshid;
var $sessdata;
var $userid;
var $error_no;
var $err;
...
// §Þnh nghÜa c¸c ph−¬ng thøc ë ®©y
} //KÕt thóc ®Þnh nghÜa líp
?>
TiÕp theo chóng ta sÏ ®Þnh nghÜa c¸c ph−¬ng thøc cho líp trªn.
Ph−¬ng thøc cÇn x©y dùng ®Çu tiªn lµ Session() sau ®ã ®Õn c¸c ph−¬ng thøc
kh¸c.
<?
// §Þnh nghÜa líp Session
class Session
{
// §Þnh nghÜa c¸c thuéc tÝnh
.. .
// §Þnh nghÜa c¸c ph−¬ng thøc
function Session($localSeshID, $localUserID=0)
{
$this->seshid = $localSeshID;
$this->userid = $localUserID;
// KÕt nèi tíi MySQL
$this->linkid=mysql_connect($this->sqlhost, $this->sqluser, $this-
>sqlpass);
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
32
if (!$this->linkid)
{
$this->err=mysql_error();
$this->error_no=102;
}
}
... // §Þnh nghÜa c¸c ph−¬ng thøc kh¸c
}
?>
2. Sö dông líp ®· ®−îc ®Þnh nghÜa.
§Ó khai b¸o mét ®èi t−îng cã kiÓu thuéc líp ®· x©y dùng ta dïng to¸n
tö new nh− sau :
<?php
require (“classes/sessions.php”); //include class
$mysesh = new Session($seshid);
if ($mysesh->error_no)
{
//Th«ng b¸o cã lçi
}
$user = $mysesh->sessdata[userid];
?>
<HTML>
<HEAD>
<TITLE>Welcome to my website, <? echo $user ?></TITLE>
</HEAD>
<BODY>
<a href=”nextpage.php?seshid=<? print $user ?>”>Next Page </a>
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
33
<FORM ACTION=”nextpage.php” METHOD=”POST”>
<input type=”hidden” name=”seshid” value=”<? print $seshid ?>”>
</FORM>
</BODY>
</HTML>
VIII. T×m hiÓu thªm vÒ HTML
PhÇn mét chóng ta ®· t×m hiÓu s¬ l−îc vÒ ng«n ng÷ HTML. Trong
môc nµy chóng ta sÏ tr×nh bµy thªm vÒ nã víi träng t©m lµ FORM cña
HTML. Lý do lµ v× khi muèn giao tiÕp gi÷a HTML vµ PHP script th× kh«ng
thÓ kh«ng biÕt ®Õn FORM. FORM lµ c«ng cô phæ biÕn nhÊt ®Ó chuyÓn d÷
liÖu tõ HTML ®Õn PHP script (client lªn server).
Th«ng th−êng, khi viÕt mét script, ng−êi ta thiÕt kÕ mét FORM sao cho nã
cung cÊp ®Çy ®ñ nh÷ng th«ng tin mµ script cÇn ®Ó xö lý.
1. CÊu tróc cña mét FORM
Mét FORM ®−îc më ®Çu b»ng thÎ <FORM ... > vµ kÕt thóc b»ng thÎ
</FORM>.
Trong FORM cã :
- Thuéc tÝnh : FORM th−êng cã ba thuéc tÝnh, ba thuéc tÝnh nµy n»m
trong thÎ FORM më ®Çu cña mét FORM : action, method, enctype .
- C¸c thÎ ®−îc dïng trong FORM : input, select, textarea, hn, p, hr,
dir, dl, menu, ol, ul, address, blockquote, [isindex]. pre .
- FORM cã ba thµnh phÇn chÝnh : textarea, select, input .
- FORM cã thÓ ®−îc dïng trong c¸c thÎ : blockquote,body,dd, li.
2. C¸c thuéc tÝnh
Khi t¹o mét FORM ,c«ng viÖc ®Çu tiªn lµ x¸c ®Þnh thuéc tÝnh cña nã.
- Thuéc tÝnh action : Action=”URL” chØ ®Õn script mµ FORM sö
dông. Ngoµi ra nã còng cã thÓ lµ mailto url, khi ®ã néi dung cña FORM
®−îc mail ®Õn ®Þa chØ trong url .
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
34
- Thuéc tÝnh method : Method cã thÓ ®−îc g¸n b»ng “GET” hoÆc
“POST” ,nã chØ ra ph−¬ng thøc Post hay Get sÏ ®−îc sö dông trong FORM,
gi¸ trÞ ngÇm ®Þnh lµ Get.
- Thuéc tÝnh enctype : Enctype=”Mime_type” :chØ ra lo¹i d÷ liÖu sÏ
göi ®i. Gi¸ trÞ ngÇm ®Þnh lµ application/x-www-form-urlencode.
Trong mét trang chóng ta cã thÓ sö dông nhiÒu FORM nhng kh«ng
®−îc lång chóng vµo nhau.
2. C¸c thµnh phÇn c¬ b¶n cña FORM.
Mét FORM ,th«ng th−êng cã ba thµnh phÇn chÝnh :
+Textarea
+Select
+Input
a - Textarea
§−îc b¾t ®Çu b»ng thÎ <Texterea> vµ kÕt thóc b»ng thÎ </Texterea>.
Bªn trong chøa c¸c ký tù, thÎ nµy ®−îc dïng lång vµo trong FORM.
C¸c thuéc tÝnh cña Texterea .
- Name : §Þnh nghÜa tªn cña thµnh phÇn, thuéc tÝnh nµy lu«n lu«n ph¶i
cã.
- Rows : Cho biÕt sè hµng cña hép v¨n b¶n.
- Cols : Cho biÕt sè cét cña v¨n b¶n.
Wrap : ChØ ra c¸ch xö lý word_wraping (c¨n chiÒu dµi cña dßng v¨n
b¶n theo kÝch th−íc cña hép v¨n b¶n) trong hép tho¹i. NÕu wrap=”off”, chøc
n¨ng word_wraping bÞ cÊm. NÕu wrap=”vitual”, chøc n¨ng nµy ®−îc bËt lªn,
khi gâ v¨n b¶n vµo, ta thÊy con trá tù ®éng xuèng hµng mçi khi nã ch¹y ®Õn
biªn cña hép v¨n b¶n, ký tù newline (OA hex) tù ®éng ®−îc thªm vµo nh−ng
kh«ng ®−îc göi ®i cïng FORM. NÕu wrap=”physical”, chøc n¨ng nµy còng
®−îc bËt vµ ho¹t ®éng nh− trªn nh−ng ký tù newline ®−îc göi ®i cïng víi
FORM.
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
35
V¨n b¶n n»m gi÷a hai thÎ <Texterea> vµ </Texterea> sÏ ®−îc thÓ hiÖn
nh− ®o¹n v¨n b¶n ngÇm ®Þnh trong vïng d÷ liÖu.
VÝ dô:
<Texterea name=”van_ban” rows=”4” cols=”40”>
.. .
</ Texterea >
b. Select
§−îc b¾t ®Çu b»ng thÎ <Select> vµ kÕt thóc b»ng thÎ </ Select >, cÆp
thÎ nµy cã thÓ lång trong FORM hay bÊt kú thµnh phÇn nµo cña FORM
ngo¹i trõ Texterea vµ Select .
Select cã c¸c thuéc tÝnh sau :
- Name : Tªn cña thµnh phÇn.
- Size : Cho biÕt sè thµnh phÇn sÏ hiÓn thÞ, gi¸ trÞ ngÇm ®Þnh lµ 1, do
®ã danh s¸ch lùa chän th−êng ®−îc thÓ hiÖn díi d¹ng pop-up menu. Thuéc
tÝnh nµy cã thÓ kh«ng cã.
- Multiple : NÕu thuéc tÝnh nµy ®−îc thiÕt lËp, nhiÒu lùa chän sÏ ®−îc
chän cïng mét lóc, ng−îc l¹i chØ ®−îc chän mét item.
Khi sö dông Select, chóng ta cã thÓ dïng thªm Option
<Option>. .. .. .. </Option>
Bªn trong chøa c¸c ký tù, cã thÓ ®−îc sö dông lång vµo Select .
C¸c thuéc tÝnh Option :
- Disable : §¸nh mét lùa chän bÞ cÊm. Khi hiÓn thÞ, chän lùa nµy sÏ bÞ
che mê.
- Selected : §¸nh dÊu chän lùa nµy ®· ®−îc chän, nÕu thuéc tÝnh
Multiple ®−îc bËt trong Select, b¹n cã thÓ ®¸nh dÊu Selected nhiÒu chän lùa
cïng lóc. Nã dïng ®Ó ®¸nh dÊu c¸c lùa chän ngÇm ®Þnh.
- Value : ChØ ra gi¸ trÞ ®−îc g¸n cho lùa chän, nÕu kh«ng cã th× néi
dung cña th− môc option sÏ ®−îc göi ®i thay cho value.
c. Input
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
36
Më ®Çu b»ng thÎ < Input >, thÎ nµy cã thÓ dïng trong bÊt cø thµnh
phÇn nµo kh¸c cña FORM ngo¹i trõ Texterea vµ Select.
C¸c thuéc tÝnh :
- Align : Cã thÓ lµ mét trong ba gi¸ trÞ top, middle, bottom dïng ®Ó
c¨n lÒ ¶nh víi c¸c v¨n b¶n xung quanh, thuéc tÝnh nµy chØ cã ý nghÜa víi
Type=“image” .
- Name : g¾n tªn biÕn cho d÷ liÖu cña thµnh phÇn nµy. Gi¸ trÞ cña
thuéc tÝnh do user lùa chän .
- Type : ®Þnh ra mét trong nh÷ng gi¸ trÞ sau checkbox, hidden, image,
password, radio, reset, submit, text, file, bottom .
- Checked : chØ ra mét nót radio, hay mét checkbox c¬ ®−îc chän hay
kh«ng.
- Maxlength : chØ ra chiÒu dµi tèi ®a mµ hép tho¹i v¨n b¶n cã thÓ chøa,
thuéc tÝnh nµy chØ cã ý nghÜa víi input cã type=”text” hay type=”password” .
- Size : chØ ra kÝch th−íc thùc sù cña hép tho¹i v¨n b¶n.
IX. Tãm l−îc
Nh− vËy, chóng ta ®· kh¶o s¸t hÇu hÕt c¸c chøc n¨ng c¬ b¶n cña PHP, tõ
c¸c kiÓu d÷ liÖu, khai b¸o biÕn, hµng, m¶ng cho tíi c¸ch thùc hiÖn
ch−¬ng tr×nh d¹ng M¸y kh¸ch/M¸y chñ (Client/Server), vµ nhóng c¸c
®o¹n m· PHP vµo c¸c trang HTML .v.v.
Nh− trªn chóng ta ®· tr×nh bµy, c¬ së d÷ liÖu cho trang Web lµ thµnh
phÇn kh«ng thÓ thiÕu, nã ®ãng vai trß quyÕt ®Þnh cho ch−¬ng tr×nh. VÝ lý do
®ã, phÇn tiÕp theo chóng ta sÏ kh¶o s¸t ng«n ng÷ SQL vµ c¸c hµm API cña
PHP ®Ó thùc hiÖn c¸c lÖnh truy vÊn trªn hÖ qu¶n trÞ c¬ së d÷ liÖu MySQL.
X. C¸c hµm API trong PHP
1. Giíi thiÖu vÒ MySQL .
PHP hç trî mét sè l−îng lín c¸c hµm lµm viÖc víi c¬ së d÷ liÖu nh
Oracle, Sybase, PostgreSQL, MySQL. .. Th«ng qua chuÈn ODBC (Open
Database Connectivity), b»ng c¸ch sö dông c¸c hµm API (Application
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
37
Programming Interface) mµ PHP cã thÓ lµm viÖc ®−îc víi nhiÒu hÖ qu¶n trÞ
c¬ së d÷ liÖu nh− vËy. NÕu hÖ qu¶n trÞ c¬ së d÷ liÖu kh«ng hç trî ODBC ,vµ
h¬n n÷a ODBC cã ®Æc ®iÓm chØ hç trî ë d¹ng chuÈn th× PHP cã thÓ lµm viÖc
víi ODBC ë tÇng trªn. NÕu kh«ng muèn sö dông ODBC ta cã thÓ sö dông
c¸c hµm API .
Trong phÇn nµy chóng ta chØ sö dông c¸c hµm API ®Ó lµm viÖc víi hÖ
qu¶n trÞ c¬ së d÷ liÖu MySQL .
2. C¸c hµm c¬ b¶n lµm viÖc víi c¬ së d÷ liÖu MySQL.
a) C¸c hµm kÕt nèi ®Õn MySQL Server
PHP cung cÊp hai hµm ®Ó kÕt nèi víi c¬ së d÷ liÖu MySQL :
mysql_connect vµ mysql_pconnect .
+ mysql_connect () : hµm nµy sÏ t¹o ra mét liªn kÕt tíi m¸y chñ
MySQL .
Có ph¸p :
int mysql_connect (string [hostname [:port] [:/path_to_socket]], string
[username], string [password]);
Trong ®ã :
- hostname : Tªn m¸y chñ c¬ së d÷ liÖu, n¬i trang web sÏ chøa c¬ së
d÷ liÖu. Gi¸ trÞ ngÇm ®Þnh lµ “localhost’”
- :port : §Þa chØ cæng, n¬i bé m¸y c¬ së d÷ liÖu l¾ng nghe yªu cÇu. Gi¸ trÞ
ngÇm ®Þnh lµ “:3306” .
- :/path_to_socket : Còng gièng nh− :port nh−ng chØ cho hÖ ®iÒu hµnh
UNIX. Gi¸ trÞ ngÇm ®Þnh lµ “:/tmp/mysql.sock” .
- username : Tªn cña ng−êi sö dông ®−îc phÐp kÕt nèi vµo bé m¸y c¬
së d÷ liÖu.
- password : MËt khÈu cña ng−êi sö dông ®Ó kÕt nèi vµo bé m¸y c¬ së
d÷ liÖu.
Hµm nµy tr¶ vÒ m· sè nhËn d¹ng nÕu kÕt nèi thµnh c«ng, gi¸ trÞ 0
(false) nÕu viÖc kÕt nèi cã lçi. M· sè nhËn d¹ng nµy sÏ ®−îc sö dông cho tÊt
c¶ c¸c yªu cÇu tíi bé m¸y c¬ së d÷ liÖu sau nµy.
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
38
Sù kÕt nèi nµy sÏ ®ãng l¹i khi gäi hµm mysql_close() hoÆc kÕt thóc
®o¹n PHP script.
+ mysql_pconnect() : Hµm nµy t¹o ra mét liªn kÕt bÒn v÷ng víi m¸y
chñ MySQL.
Có ph¸p :
int mysql_pconnect (string [hostname [:port] [:/path_to_socket]], string
[username], string [password]);
Tham sè vµ gi¸ trÞ tr¶ vÒ cña hµm nµy còng gièng hµm
mysql_connect(). Sù kh¸c biÕt gi÷a hai hµm nµy lµ liªn kÕt tíi m¸y chñ
MySQL kh«ng bÞ ®ãng l¹i kÓ c¶ khi kÕt thóc kÞch b¶n (script) PHP hay gäi
hµm mysql_close(). Môc ®Ých cña hµm nµy lµ lu«n lu«n duy tr× liªn kÕt tíi
m¸y chñ MySQL do lu«n cã sù yªu cÇu tíi m¸y chñ, tr¸nh cho m¸y chñ ph¶i
t×m kiÕm m· sè nhËn d¹ng míi tõ ®ã gi¶m thêi gian truy cËp .
Chó ý : hµm nµy chØ thùc hiÖn ®−îc khi PHP ®−îc ®Þnh cÊu h×nh nh−
lµ mét module cña Web server .
+ mysql_close() : Hµm nµy huû bá sù kÕt nèi tíi m¸y chñ MySQL .
Có ph¸p :
int mysql_close(int [link_identifier]);
Tham sè link_identifier lµ m· sè nhËn d¹ng t¹o ra bëi hµm
mysql_connect(). Hµm tr¶ vÒ lµ True nÕu thµnh c«ng, ng−îc l¹i lµ False .
b) C¸c hµm thao t¸c trªn CSDL
+ mysql_create_db() : Hµm t¹o c¬ së d÷ liÖu
Có ph¸p :
int mysql_create_db(string name, int [link_identifier]) ;
Trong ®ã :
- string name : Tªn cña c¬ së d÷ liÖu cÇn t¹o.
- int link_identifier : M· sè nhËn d¹ng ®−îc cÊp bëi hµm
mysql_connect() .
Chóng ta hoµn toµn cã thÓ göi c©u lÖnh SQL ®Ó t¹o c¬ së d÷ liÖu th«ng
qua hµm mysql_query() .
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
39
+ mysql_drop_db() : Hµm xo¸ c¬ së d÷ liÖu
Có ph¸p :
int mysql_drop_db(string name, int [link_identifier]);
Trong ®ã :
- string name : Tªn cña c¬ së d÷ liÖu cÇn xo¸ .
- int link_identifier : M· sè nhËn d¹ng ®−îc cÊp bëi hµm
mysql_connect() .
Chóng ta hoµn toµn cã thÓ göi c©u lÖnh SQL ®Ó xo¸ c¬ së d÷ liÖu th«ng
qua hµm mysql_query().
+ mysql_select_db() : Hµm cho c¬ së d÷ liÖu ho¹t ®éng .
Có ph¸p :
int mysql_select_db(string database_name, int [link_identifier]);
Trong ®ã:
- database_name : Tªn cña c¬ së d÷ liÖu mµ sau nµy c¸c hµm API
kh¸c cña PHP sÏ thùc hiÖn trªn ®ã.
- int link_identifier : M· nhËn d¹ng ®−îc cÊp bëi hµm mysql_connect().
C©u lÖnh nµy sÏ g¾n tªn c¬ së d÷ liÖu víi m· nhËn d¹ng, sau nµy khi
lµm viÖc víi link_identifier sÏ bao gåm c¶ c¬ së d÷ liÖu ®−îc chän .
c) C¸c hµm thao t¸c trªn d÷ liÖu
+ mysql_query() : Hµm göi c©u lÖnh SQL tíi m¸y chñ MySQL .
Có ph¸p :
int mysql_query(string query, [int link_identifier]) ;
Trong ®ã :
- string query : C©u lÖnh SQL cÇn göi tíi m¸y chñ MySQL .
- int link_identifier : M· sè nhËn d¹ng, nã ph¶i ®−îc thùc hiÖn trong
hµm mysql_select_db() tr−íc ®ã .
+ mysql_db_query() : Hµm göi c©u lÖnh SQL tíi m¸y chñ MySQL .
Có ph¸p :
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
40
int mysql_db_query(string database, string query, int
[link_identifier]);
Trong ®ã :
- string database : Tªn c¬ së d÷ liÖu c©u lÖnh SQL sÏ thùc hiÖn trªn ®ã.
- string query : C©u lÖnh SQL cÇn thùc hiÖn .
- link_identifier : M· sè nhËn d¹ng ®−îc cÊp bëi hµm mysql_connect()
Hµm nµy chØ râ c©u lÖnh ®−îc thùc hiÖn trªn c¬ së d÷ liÖu nµo nªn
tr−íc ®ã kh«ng cÇn thùc hiÖn hµm mysql_select_db();
+mysql_insert_id() :
Hµm lÊy gi¸ trÞ ®−îc sinh ra tõ c©u truy vÊn INSERT tríc
Có ph¸p :
int mysql_insert_id([link_identifier]) ;
trong ®ã:
int link_identifier : M· sè nhËn d¹ng ®−îc cÊp bëi hµm
mysql_connect() .
Hµm nµy tr¶ vÒ gi¸ trÞ id ®−îc sinh ra trong cét AUTO_INCREMENT
bëi c©u truy vÊn tr−íc ®ã. §iÒu nµy chØ cã t¸c dông trªn link_identifier ®−îc
chØ ra trong hµm, nÕu gäi hµm trªn mµ kh«ng chØ ®Þnh tham sè link_identifier
th× liªn kÕt ®−îc më cuèi cïng sÏ ®−îc chØ ®Þnh.
Hµm mysql_insert_id() tr¶ vÒ gi¸ trÞ 0 nÕu c©u truy vÊn tr−íc ®ã kh«ng sinh
ra mét gi¸ trÞ AUTO_INCREMENT. NÕu ta muèn gi÷ l¹i gi¸ trÞ cho lÇn sau,
th× ph¶i gäi hµm nµy ngay sau c©u truy vÊn sinh ra gi¸ trÞ .
+ mysql_fetch_row() :
Hµm tr¶ vÒ mét m¶ng lµ gi¸ trÞ cña mét b¶ng ghi hiÖn t¹i víi chØ sè lµ
sè thø tù cña c¸c tr−êng (chØ sè b¾t ®Çu tõ 0). Sau ®ã hµm sÏ trá tíi b¶ng ghi
tiÕp theo cho tíi khi gÆp b¶ng ghi cuèi cïng hµm tr¶ vÒ gi¸ trÞ false. §Ó truy
xuÊt tíi c¸c gi¸ trÞ cña cét ta viÕt : tªn_m¶ng[sè thø tù]
Có ph¸p :
array mysql_fetch_row( int result_identifier);
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
41
Trong ®ã : result_identifier lµ m· sè tr¶ vÒ cña hµm mysql_query()
hoÆc mysql_db_query() .
VÝ dô :
<?php
$mysql = “select id, name from ds_thanhvien”; // cau lenh SQL
$link = mysql_connect($host, $user, $password); //lay ma
mysql_select_db($database_name, $link);
$result = mysql_query($mysql ,$link);
while ($row = mysql_fetch_row($result))
{
echo $row[0] ;
echo $row[1];
}
?>
+ mysql_fetch_array() :
Hµm tr¶ vÒ mét m¶ng lµ gi¸ trÞ cña mét b¶ng ghi hiÖn t¹i, sau ®ã hµm
sÏ trá tíi b¶ng ghi tiÕp theo cho tíi khi gÆp b¶ng ghi cuèi cïng hµm tr¶ vÒ
gi¸ trÞ false.
Có ph¸p :
array mysql_fetch_array( int result_identifier [, int result_type] );
Trong ®ã : result_identifier lµ m· sè tr¶ vÒ cña hµm mysql_query()
hoÆc mysql_db_query() .
§Ó truy xuÊt ®Õn c¸c thµnh phÇn cña cét :
tªn_biÕn_m¶ng[“tªn_trêng”];
result_type lµ mét h»ng sè cã thÓ nhËn c¸c gi¸ trÞ sau:
-MYSQL_NUM : chØ tr¶ l¹i mét m¶ng chøa c¸c chØ sè lµ sè (gièng
nh− hµm mysql_fetch_row() )
-MYSQL_ASSOC: chØ tr¶ l¹i mét m¶ng liªn kÕt
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
42
-MYSQL_BOTH : tr¶ l¹i m¶ng chøa ®ùng c¸c chØ sè gåm c¶ c¸c con
sè vµ chØ sè liªn kÕt .
Hµm nµy lµ sù më réng cña hµm mysql_fetch_row(). Nã cho phÐp truy
cËp tr−êng d÷ liÖu cña m¶ng kÕt qu¶ kh«ng chØ th«ng qua c¸c chØ sè lµ c¸c sè
mµ chóng cã thÓ lµ tªn cña c¸c tr−êng d÷ liÖu. §iÒu nµy lµm cho viÖc lËp
tr×nh ®¬n gi¶n vµ chÝnh x¸c h¬n.
VÝ dô:
<?php
$mysql = “select id, name from ds_thanhvien”;
$link = mysql_connect($host, $user, $password);
$result = mysql_db_query(“php”, $mysql);
while ($row = mysql_fetch_array($result)) {
echo “user_id: “. $row[“id”] .“<BR>n”;
echo “user_id: “. $row[0] .“<BR>n”;
echo “user_name: “. $row[“name”] .“<BR>n”;
echo “user_name: “. $row[1] .“<BR>n”;
}
mysql_free_result ($result);
?>
+ mysql_fetch_object() : Hµm tr¶ vÒ mét ®èi t−îng lµ gi¸ trÞ cña mét b¶ng ghi
hiÖn thêi. Sau ®ã hµm sÏ trá tíi b¶ng ghi tiÕp theo cho tíi khi gÆp b¶ng ghi cuèi
cïng hµm tr¶ vÒ gi¸ trÞ false. §Ó truy xuÊt tíi c¸c gi¸ trÞ cña cét ta viÕt
tªn_object->tªn_cét .
Có ph¸p :
object mysql_fetch_object(int result_identifier);
Trong ®ã : result_identifier lµ m· sè tr¶ vÒ cña hµm mysql_query()
hoÆc mysql_db_query() .
VÝ dô :
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
43
<?php
$mysql = “select id, name from ds_thanhvien”;
$link = mysql_connect($host, $user, $password);
$result = mysql_db_query(“php”, $mysql);
while ($row = mysql_fetch_object($result)) {
echo $row->id ;
echo $row->name;
}
?>
+mysql_fetch_assoc() :lÊy vÒ mét dßng kÕt qu¶ nh− lµ mét m¶ng liªn
kÕt .
có ph¸p: array mysql_fetch_assoc(int result_identifier)
Trong ®ã : result_identifier lµ m· sè tr¶ vÒ cña hµm mysql_query()
hoÆc mysql_db_query() .
Hµm tr¶ vÒ mét m¶ng t−¬ng øng víi mét b¶n ghi ®−îc lÊy vÒ vµ tr¶ l¹i
FALSE nÕu kh«ng cã b¶n ghi nµo. Hµm nµy t−¬ng ®−¬ng víi hµm
array mysql_fetch_array() víi tham sè result_type lµ : MYSQL_ASSOC
vÝ dô :
<?php
$mysql = “select id, name from ds_thanhvien”;
$link = mysql_connect($host, $user, $password);
$result = mysql_db_query(“php”, $mysql);
while ($row = mysql_fetch_assoc($result)) {
echo $row[“id”];
echo $row[“name”];
}
?>
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
44
+mysql_data_seek()
Di chuyÓn con trá bªn trong “tËp kÕt qu¶” (cã ®−îc sau khi c©u truy vÊn
SELECT ®−îc thùc hiÖn)
Có ph¸p: bool mysql_data_seek(int result_identifier, int row_number);
Trong ®ã : result_identifier lµ m· sè tr¶ vÒ cña hµm mysql_query(),
mysql_db_query(), mysql_list_tables(), mysql_list_dbs() .
row_number lµ chØ sè cña b¶n ghi mµ cÇn ®Æt con trá vµo .
Hµm tr¶ vÒ true nÕu thµnh c«ng, false nÕu lçi .
Hµm nµy sÏ di chuyÓn con trá bªn trong “tËp kÕt qu¶” (®−îc chØ râ bëi
tham ®èi result_identifier) ®Õn dßng cã m· b»ng tham ®èi row_number.
C¸c dßng trong tËp kÕt qu¶ ®−îc b¾t ®Çu tõ 0
VÝ dô:
<?php
$link = mysql_pconnect ($host, $user, $password)
or die ("Could not connect");
$query = "SELECT last_name, first_name FROM friends";
$result = mysql_db_query (“php”,$query)
or die ("Query failed");
# fetch rows in reverse order
for ($i = mysql_num_rows ($result) - 1; $i >=0; $i--) {
if (! Mysql_data_seek ($result, $i)) {
printf ("Cannot seek to row %dn", $i);
continue;
}
if(!($row = mysql_fetch_object ($result)))
continue;
printf ("%s %s<BR>n", $row->last_name, $row->first_name);
}
mysql_free_result ($result);
?>
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
45
+ mysql_num_rows() :tr¶ l¹i sè dßng trong result_identifier (n¬i chøa kÕt
qu¶ cña c©u lÖnh SQL ®· ®−îc thùc hiÖn)
có ph¸p: mysql_num_rows(int result_identifier) ;
Trong ®ã : result_identifier lµ m· sè tr¶ vÒ cña hµm mysql_query(),
mysql_db_query(), mysql_list_tables(), mysql_list_dbs() .
+mysql_affected_rows()
có ph¸p : int mysql_affected_rows(int [link_identifier]) ;
Trong ®ã :int link_identifier lµ m· sè nhËn d¹ng, nã ph¶i ®−îc thùc hiÖn
trong hµm mysql_select_db() tr−íc ®ã .
Hµm tr¶ vÒ sè dßng ®· bÞ t¸c ®éng bëi mét c©u truy vÊn SQL :INSERT,
UPDATE, DELETE tr−íc ®ã theo tham sè link_identifier. NÕu
link_identifier kh«ng ®−îc chØ ®Þnh th× m· kÕt nèi tr−íc ®ã sÏ ®−îc chØ ®Þnh.
Chó ý :
- NÕu c©u lÖnh SQL tr−íc ®ã lµ DELETE mµ kh«ng cã mÖnh ®Ò WHERE th×
toµn bé c¸c b¶n ghi trong b¶ng ®· bÞ xo¸ nh−ng hµm mysql_affected_rows()
sÏ tr¶ vÒ gi¸n trÞ 0.
-Hµm nµy kh«ng cã t¸c dông ®èi víi c©u lÖnh truy vÊn SELECT. §Ó lÊy ®−îc
sè dßng tr¶ vÒ (sè dßng ®· bÞ t¸c ®éng) bëi c©u lÖnh SELECT ta dïng
hµm mysql_num_rows().
+mysql_result() : lÊy d÷ liÖu tõ result_identifier
có ph¸p : mixed mysql_result(int result_identifier, int row, mixed [field]);
Trong ®ã : result_identifier lµ m· sè tr¶ vÒ cña hµm mysql_query(),
mysql_db_query(), mysql_list_tables(), mysql_list_dbs() .
row lµ b¶n ghi mµ ta sÏ lÊy d÷ liÖu
field lµ tr−êng trong dßng row mµ ta sÏ lÊy d÷ liÖu .
C¸c tham sè result_identifier vµ row ph¶i cã, cßn tham field lµ tïy
chän. Hµm sÏ tr¶ l¹i c¸c néi dung cña dßng row vµ cét field tõ tËp kÕt qu¶
®−îc chØ ®Þnh bëi biÕn result_identifier. NÕu ®èi sè field kh«ng ®−îc chØ
®Þnh râ th× tr−êng tiÕp theo cña b¶n ghi sÏ ®−îc tr¶ vÒ .
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
46
VÝ dô:
<?php
$mysql = “select id, name from ds_thanhvien”;
$link = mysql_connect($host, $user, $password);
$result = mysql_db_query(“php”, $mysql);
echo “ mysql_result($result, 0, “id”) <BR>n”;
echo “ mysql_result($result, 0, “name”) <BR>n”;
?>
+mysql_free_result() : Hµm gi¶i phãng vïng bé nhí ®−îc liªn kÕt víi
result_identifier .
có ph¸p: mysql_free_result(int result_identifier) ;
Trong ®ã : result_identifier lµ m· sè tr¶ vÒ cña hµm mysql_query(),
mysql_db_query(), mysql_list_tables(), mysql_list_dbs() .
Hµm nµy chØ ®−îc dïng nÕu nh− b¹n ®¸nh gi¸ thÊy r»ng kÞch b¶n cña
b¹n sö dông qu¸ nhiÒu bé nhí khi ®ang ch¹y. Gäi hµm nµy trªn mét tr×nh xö
lý kÕt qu¶ sÏ gi¶i phãng toµn bé d÷ liÖu liªn kÕt trong bé nhí .
Ngoµi ra cßn c¸c hµm kh¸c:
string mysql_tablename (int result_identifier, int i)
Hµm tr¶ l¹i tªn cña b¶ng/csdl t¹i chØ sè i trong result_identifier.
string mysql_field_name (int result_identifier, int field_index)
Hµm tr¶ l¹i tªn cña tr−êng t¹i vÞ trÝ field_index trong m· result_identifier
int mysql_list_dbs ([int link_identifier])
Hµm tr¶ l¹i mét result_identifier lµ danh s¸ch biÕn CSDL trªn MySQL Server
nÕu thµnh c«ng, lçi tr¶ vÒ false .
int mysql_list_tables (string database [, int link_identifier])
Hµm tr¶ vÒ danh s¸ch tÊt c¶ c©c b¶ng trong mét CSDL MySQL, thµnh c«ng
tr¶ vÒ mét result identifier, gi¸ trÞ false nÕu cã lçi .
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
47
int mysql_list_fields (string database_name, string table_name [, int
link_identifier])
Hµm tr¶ vÒ th«ng tin liªn quan ®Õn mét b¶ng d÷ liÖu.
int mysql_num_fields (int result_identifier)
Tr¶ vÒ sè tr−êng trong tËp kÕt qu¶ .
int mysql_num_rows (int result_identifier)
Tr¶ vÒ sè b¶n ghi trong tËp kÕt qu¶, hµm nµy chØ cã gi¸ ®èi víi c¸c c©u lÖnh
SELECT ,®Ó lÊy l¹i sè b¶n ghi ®−îc tr¶ l¹i tõ c¸c lÖnh :INSERT, UPDATE
hoÆc DELETE, dïng mysql_affected_rows().
string mysql_field_type (int result_identifier, int field_index)
Hµm tr¶ vÒ kiÓu d÷ liÖu cña tr−êng t¹i vÞ trÝ field_index trong m·
result_identifier .
int mysql_field_len (int result_identifier, int field_offset)
Hµm tr¶ vÒ ®é dµi cña tr−êng ®−îc chØ ®Þnh th«ng qua tham sè field_offset .
array mysql_fetch_lengths (int result_identifier)
tr¶ vÒ mét m¶ng t−¬ng øng víi c¸c ®é dµi cña mçi tr−êng trong b¶n ghi ®−îc
lÊy vÒ bëi hµm mysql_fetch_row() hoÆc false nÕu cã lçi.
int mysql_errno ([int link_identifier])
Hµm tr¶ vÒ m· lçi tõ hµm thao t¸c CSDL MySQL tr−íc ,tr¶ vÒ gi¸ trÞ 0 nÕu
kh«ng cã lçi .
string mysql_error ([int link_identifier])
Hµm tr¶ vÒ x©u th«ng b¸o lçi tõ hµm thao t¸c CSDL MySQL tr−íc, tr¶ vÒ
x©u rçng nÕu kh«ng cã lçi .
object mysql_fetch_field (int result_identifier [, int field_offset])
LÊy th«ng tin vÒ trêng tõ tËp kÕt qu¶ råi tr¶ l¹i nh mét ®èi t−îng.
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
48
XI. Session vµ Cookie
1. Session lµ g× ?
HTTP lµ giao thøc kh«ng ®−îc x©y dùng theo c¸ch ®Ó cã thÓ lu gi÷ ®−îc
tr¹ng th¸i gi÷a hai lÇn giao dÞch. Khi mét ng−êi dïng yªu cÇu truy nhËp mét
trang Web, råi sau ®ã ng−êi dïng nµy l¹i tiÕp tôc yªu cÇu truy nhËp ®èi víi
trang Web kh¸c th× HTTP kh«ng thÓ biÕt ®−îc r»ng ®ã lµ hai yªu cÇu tõ cïng
mét ng−êi dïng.
ý t−ëng cña viÖc ®iÒu khiÓn phiªn lµm viÖc lµ cã thÓ l−u vÕt cña mét ng−êi
dïng trong suèt mét phiªn lµm viÖc.
NÕu chóng ta lµm ®−îc ®iÒu nµy th× sÏ dÔ dµng cung cÊp mét truy nhËp cho
ng−êi dïng, tõ ®ã ta cã thÓ l−u vÕt tr¹ng th¸i cña ng−êi dïng vµ cã thÓ thùc
hiÖn viÖc mua b¸n trªn m¹ng.
Session trong PHP ®−îc ®iÒu khiÓn bëi mét gi¸ trÞ ID duy nhÊt gäi lµ
“sessionID”, gi¸ trÞ nµy sÏ ®−îc tù ®éng sinh ra vµ m· hãa. SessionID ®−îc
sinh ra bëi PHP vµ ®−îc l−u tr÷ ë phÝa client trong suèt mét phiªn giao dÞch.
Nã cã thÓ ®−îc l−u tr÷ trªn c¸c Cookie ë m¸y ng−êi dïng hay truyÒn lªn c¸c
URL.
SessionID cã t¸c dông nh− mét kho¸ ®Ó b¹n cã thÓ ®¨ng ký nh÷ng biÕn ®Æc
biÖt gäi lµ biÕn session. Néi dung cña nh÷ng biÕn nµy ®−îc chøa trªn Server.
SessionID lµ nh÷ng th«ng tin chØ thÊy ®−îc ë phÝa client. NÕu t¹i thêi ®iÓm
nµo ®ã cña mét kÕt nèi ®Õn trang Web cña b¹n, sessionID cã thÓ thÊy ®−îc
trªn cookie hay URL, b¹n cã thÓ truy nhËp nh÷ng biÕn session chø trªn
Server ë phiªn lµm viÖc ®ã.
2) Cookie lµ g× ?
Cookie lµ nh÷ng mÈu tin nhá mµ trang script cã thÓ chøa trªn c¸c m¸y kh¸ch
(client). B¹n cã thÓ thiÕt lËp mét cookie trªn mét m¸y ng−êi dïng b»ng c¸ch
göi mét “HTTP header” cã chøa d÷ liÖu theo d¹ng sau:
Set-Cookie:Name=VALUE;[expires=DATE;][path=PATH;]
[domain=DOMAIN_NAME;][secure]
c©u lÖnh nµy sÏ t¹o ra mét cookie cã tªn gäi lµ NAME víi gi¸ trÞ lµ VALUE.
Tr−êng expires sÏ thiÕt lËp ngµy mµ cookie sÏ hÕt hiÖu lùc, path vµ domain
cã thÓ ®−îc sö dông ®Ó chØ ®Þnh c¸c URL (n¬i mµ cookie sÏ ®−îc göi ®i). Tõ
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
49
kho¸ secure cã nghÜa lµ cookie sÏ kh«ng göi ®i trªn qu¸ mét kÕt nèi HTTP
chuÈn.
Khi mét browser kÕt nèi tíi mét URL, tríc tiªn nã kiÓm tra c¸c cookie ®·
®−îc l−u tr÷ trªn m¸y. NÕu cã bÊt k× mét cookie nµo cã liªn quan ®Õn ®Þa chØ
URL võa ®−îc kÕt nèi, chóng sÏ ®−îc truyÒn trë l¹i cho server.
3) ThiÕt lËp c¸c cookie tõ PHP
Ta cã thÓ thiÕt lËp c¸c cookie trong PHP b»ng c¸ch sö dông hµm:
int setcookie (string name [,string value [,int expire [,string path [,string
domain [, int secure]]]]]);
Nh÷ng tham ®èi cña hµm t−¬ng øng víi nh÷ng tham ®èi cña Set-Cookie
header ë trªn.
NÕu ta thiÕt lËp cookie nh− sau:
setcookie ("TestCookie", "Test Value");
th× khi ng−êi dïng ®Õn th¨m trang kÕ tiÕp trong site cña ta (hoÆc reload trang
hiÖn t¹i) ta sÏ ph¶i truy nhËp vµo biÕn víi tªn lµ "TestCookie" cã chøa gi¸ trÞ
lµ "Test Value", ta chØ cã thÓ truy nhËp tíi nã th«ng qua biÕn m¶ng
$HTTP_COOKIE_VARS [] cña PHP .
Ta cã thÓ xo¸ mét cookie b»ng c¸ch gäi l¹i hµm setcookie() víi tham ®èi nh−
sau:
tªn cña cookie lµ tªn cña cookie cÇn xo¸ vµ kh«ng cã tr−êng gi¸ trÞ.
4) Sö dông kÕt hîp cookie víi session
§èi víi cookie cã mét sè vÊn ®Ò sau ®©y:
Mét vµi webrowser kh«ng thÓ truy cËp ®−îc tíi c¸c cookie (kh«ng hç trî
cookie) vµ mét sè ng−êi dïng kh«ng cã c¸c cookie trªn browser cña hä. §©y
lµ lý do ®Ó PHP sö dông c¶ hai c¸ch thøc :cookie vµ URL method.
Khi sö dông PHP session, ta sÏ kh«ng ph¶i thiÕt lËp c¸c cookie, nh÷ng hµm
session sÏ l−u gi÷ nh÷ng th«ng tin nµy cho chóng ta.
§Ó xem néi dung cña c¸c cookie ®· ®−îc thiÕt lËp bëi session ta sö dông
hµm:
session_get_cookie_params(). Hµm nµy sÏ tr¶ vÒ mét m¶ng liªn kÕt mµ c¸c
phÇn tö cña m¶ng chøa c¸c th«ng tin nh−: lifetime, path, domain,.. .
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
50
§Ó thiÕt lËp c¸c tham sè cho session cookie ta dïng hµm:
void session_set_cookie_params (int lifetime [, string path [, string
domain]])
5) L−u gi÷ sessionID
PHP sÏ sö dông c¸c cookie mÆc ®Þnh cïng víi session. NÕu cã thÓ ®−îc, mét
cookie sÏ ®−îc thiÕt lËp chøa SessionID.
Mét c¸ch ®Ó sö dông c¸c SessionID trªn URL ®ã lµ dÞch PHP cïng víi lùa
chän –enable-tran-sid.
C¸ch n÷a lµ ta cã thÓ ®a sessionID vµo trong thÎ link. SessionID ®−îc chøa
trong h»ng SID. §Ó lµm ®−îc ®iÒu nµy, ta thªm vµo cuèi thÎ link h»ng SID
®Ó dïng nã nh− lµ ph−¬ng thøc GET.
VÝ dô:
<A HREF = “link.php?<?=SID?>”>
H»ng SID lµm viÖc ®−îc nh− trªn chØ khi ta cÊu h×nh PHP cïng víi
--enable-track-vars.
6) Thùc thi nh÷ng phiªn lµm viÖc ®¬n gi¶n.
Nh÷ng b−íc c¬ b¶n cña viÖc sö dông session:
+ B¾t ®Çu mét Session
+ §¨ng ký nh÷ng biÕn Session
+ Sö dông biÕn Session
+ Huû bá biÕn Session vµ kÕt thóc Session
6.1 B¾t ®Çu mét Session
C¸ch ®¬n gi¶n nhÊt ®Ó b¾t ®Çu mét Session lµ dïng hµm:
Bool Session_start();
Hµm nµy sÏ kiÓm tra xem ®· cã mét Session ID nµo ®· ®−îc t¹o ra hay ch−a.
NÕu ch−a th× nã sÏ t¹o ra mét Session ID, cßn nÕu ®· tån t¹i mét Session ID
th× thùc chÊt nã chØ lÊy ra nh÷ng biÕn Session ®Ó ta cã thÓ dïng nã. Hµm tr¶
vÒ gi¸ trÞ TRUE nÕu thµnh c«ng ,ng−îc l¹i tr¶ vÒ gi¸ trÞ FALSE.
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
51
Chóng ta còng cã thÓ b¾t ®Çu mét Session b»ng c¸ch cÊu h×nh PHP ®Ó nã tù
®éng b¾t ®Çu khi cã ai ®ã th¨m trang Web cña ta. §iÒu nµy cã thÓ lµm ®−îc
nÕu ta chän session. auto_start trong file c:Windowsphp.ini
Mét Session còng sÏ ®−îc b¾t ®Çu khi ta ®¨ng ký mét biÕn Session.
6.2 §¨ng ký nh÷ng biÕn Session
§Ó cho mét biÕn cã thÓ l−u dÊu th«ng tin tõ mét trang script nµy sang trang
script kh¸c, ta cÇn ph¶i ®¨ng ký nã b»ng c¸ch gäi hµm:
bool session_register(mixed VarName [,mixed...]);
ViÖc ®¨ng ký nµy sÏ l−u tr÷ tªn biÕn vµ ghi gi¸ trÞ cña biÕn cho ®Õn khi phiªn
giao dÞch kÕt thóc hoÆc khi ta huû bá (deregister) viÖc ®¨ng ký biÕn ®ã.
VÝ dô:
§Ó ®¨ng ký biÕn $Var_name ta viÕt nh− sau:
$Var_name= 5;
session_register(“Var_name”);// kh«ng nªn sö dông ký tù $ trong ®¨ng ký
mét biÕn
6.3 Sö dông biÕn Session
§Ó ®a mét biÕn Session vµo trong ph¹m vi mµ nã cã thÓ ®−îc sö dông, ta cÇn
ph¶i khëi t¹o mét Session b»ng mét trong nh÷ng c¸ch ®· nªu trªn.
Sau ®ã, ta cã thÓ truy cËp ®−îc nh÷ng biÕn nµy. NÕu ®· ®¨ng ký biÕn nµy lµ
toµn côc b»ng c¸ch sö dông hµm register_global(), th× ta cã thÓ truy nhËp
biÕn b×nh th−êng th«ng qua tªn biÕn, vÝ dô : $Var_name ;
NÕu kh«ng khai b¸o biÕn lµ toµn côc th× ta ph¶i truy nhËp nh÷ng biÕn Session
th«ng qua m¶ng liªn kÕt $HTTP_SESSION_VARS(“Var_name”);
§Ó kiÓm tra xem mét biÕn ®· ®−îc ®¨ng ký lµ biÕn Session hay ch−a ta dïng
hµm: bool session_is_registered (string name);
Hµm nµy tr¶ vÒ gi¸ trÞ TRUE nÕu biÕn ®· ®−îc ®¨ng ký, ng−îc l¹i tr¶ vÒ
gi¸ trÞ FALSE.
Ta còng cã thÓ kiÓm tra mét biÕn cã lµ biÕn Session b»ng c¸ch kiÓm tra
m¶ng liªn kÕt $HTTP_SESSION_VARS() vÒ sù tån t¹i cña biÕn.
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
52
6.4 Huû bá biÕn Session vµ kÕt thóc Session
Khi muèn kÕt thóc mét biÕn Session, ta cã thÓ huû bá ®¨ng ký cña biÕn ®ã
b»ng hµm : bool session_unregister (string name) ;
Trong ®ã: name lµ tªn biÕn ta muèn huû ®¨ng ký (tªn nµy kh«ng cÇn cã ký
tù $)
Hµm tr¶ vÒ gi¸ trÞ TRUE nÕu thµnh c«ng ,ng−îc l¹i tr¶ vÒ gi¸ trÞ FALSE.
Hµm nµy chØ cã thÓ huû ®¨ng ký cña mét biÕn Session t¹i mét thêi ®iÓm.
§Ó huû tÊt c¶ c¸c biÕn Session hiÖn t¹i, ta dïng hµm: void session _unset ( ) ;
§Ó kÕt thóc mét Session ta dïng hµm:s
bool session_destroy () ;
Hµm nµy sÏ xo¸ ®i SessionID vµ hñy tÊt c¶ nh÷ng d÷ liÖu liªn quan ®Õn
Session nµy. Hµm tr¶ vÒ gi¸ trÞ TRUE nÕu thµnh c«ng, ng−îc l¹i tr¶ vÒ gi¸ trÞ
FALSE.
Ta nªn hñy tÊt c¶ c¸c biÕn Session tr−íc khi kÕt thóc mét Session.
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
53
Ch−¬ng III : Ph−¬ng ph¸p Fast Template trong
PHP
I. C¸c kÜ thuËt mÉu phæ biÕn
C¸c mÉu cã thÓ ®−îc dïng nÕu nh− b¹n ®ang thùc hiÖn mét site
th−êng xuyªn sö dông l¹i c¸c thµnh phÇn .Trong ph¹m vi cña PHP ,c¸c
mÉu ë ®©y ý nãi ®Õn HTML. Kh«ng dïng c¸c mÉu ,mét web site phøc
t¹p sÏ cã cÊu tróc rÊt nÆng.
§Ó gi¶i quyÕt vÊn ®Ò trªn ,nhiÒu kÜ thuËt mÉu ®· tån t¹i, nhóng cã
thÓ h÷u Ých trong mét sè tr−êng hîp. Chóng ta giíi thiÖu qua mét sè kÜ
thuËt ®−îc sö dông th−êng xuyªn .
Name
Code/
HTML
mixed
HTML
structure
Defined
in PHP
Advantages
Disadvantages Useful for
Embedded
PHP
Yes Yes
Fastand
easy
Leadsto unreadable
scrips, noreuse of
existing code,hardto
maintain
Quick and
Smallscripts
Separating
common
parts
Yes No
Fast and
easy,
Reuseof
certain pasts
Leadsto unreadable
scripts, often hard
to maintain
Web sites
with LOC <
1000
FastTemplate No No
Abstracts
HTML
completely
from
coding, easy
to adapt to
new needs
Complex
Web sites
with LOC >
1000
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
54
ViÖc sö dông c¸c mÉu trong c¸c tr×nh øng dông
1. Embedded PHP
Chóng ta cã thÓ nhóng c¸c c©u lÖnh PHP vµo trong HTML. Mét vÝ dô
®iÓn h×nh cña c¸ch thøc trªn :
<HTML>
<HEAD>
<TITLE>powers</TITLE>
</HEAD>
<BODY BGCOLOR=”black” TEXT=”white”>
<H1>powers</H1>
<TABLE>
<TR>
<TH>i</TH>
<TH>i^i</TH>
</TR>
<?php
for ($i= 0 ; $i< 10 ; $i++) {
echo “<TR><TD>$i</TD><TD>”.pow($i,$i).”</TD></TR>n”;
}
?>
</TABLE>
</BODY>
</ HTML >
Ph−¬ng ph¸p nµy ®−îc dïng kh¸ phæ biÕn víi nh÷ng ng−êi b¾t ®Çu
häc lËp tr×nh PHP. Tíi mét lóc nµo ®ã ,nh÷ng ng−êi míi lËp tr×nh b»ng
ph−¬ng ph¸p nhóng tiÕn tíi sù thµnh th¹o ë c¸c møc cao h¬n, nh−ng thËt
®¸ng tiÕc, c¸ch lËp tr×nh nµy l¹i ng¨n c¶n ®iÒu ®ã .
2. Separating common parts
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
55
MÆc dï kÜ thuËt nµy cã sö dông l¹i c¸c m· code/HTML vµ viÖc thay ®æi
còng dÔ dµng h¬n ,nh−ng nã vÉn thõa h−ëng hÇu hÕt c¸c nh−îc ®iÓm cña
ph−¬ng ph¸p PHP nhóng .
C¸ch lµm th«ng th−êng lµ b¾t ®Çu víi c¸c HTML header vµ footer, chóng
®−îc viÕt thµnh c¸c hµm. C¸c hµm nµy cã thÓ ®−îc gäi khi cÇn ®Õn chóng
vµ do ®ã linh ho¹t h¬n khi sö dông. Sù thay ®æi c¸c hµm sÏ ®−îc ph¶n
¸nh trong tÊt c¶ c¸c tr−êng hîp.
Ta t¸ch vÝ dô PHP nhóng ë trªn ra hai file .
TÖp prepend.inc chøa hai hµm :hiÓn thÞ mét HTML header vµ mét HTML
footer .
<?php //prepend.inc
function CommonHeader($title) {
?>
<HTML>
<HEAD>
<TITLE><?php echo $title ?></TITLE>
</HEAD>
<BODY BGCOLOR=”black” TEXT=”white”>
<H1><?php echo $title ?></H1>
<?php
}
function CommonFooter() {
?>
</TABLE>
</BODY>
</HTML>
<?php
}
?>

TÖp main.php sö dông tÖp prepend.inc
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
56
<?php include “prepend.inc”; ?>
<?php CommonHeader( “power” ); ?>
<TABLE>
<TR>
<TH>i</TH>
<TH>i^i</TH>
</TR>
<?php
for ($i= 0 ; $i< 10 ; $i++) {
echo “<TR><TD>$i</TD><TD>”.pow($i,$i).” </TD></TR>n”;
}
?>
</TABLE>
<?php CommonFooter(); ?>
3. FastTemplate
Trong phÇn nµy chóng ta cïng t×m hiÓu vÒ ph−¬ng ph¸p thiÕt kÕ
Web trong PHP lµ FastTemplate. §©y lµ ph−¬ng ph¸p hay, nã ®−îc g¾n
kÌm víi c¸c gãi øng dông cña PHP, nã ®−îc x©y dùng trong tÖp tin cã
tªn class. FastTemplate.php .
Môc ®Ých cña ph−¬ng ph¸p nµy lµ gióp cho ch−¬ng tr×nh viÕt b»ng PHP
cã nhiÒu giao diÖn kh¸c nhau trªn cïng mét c¬ së m·, vµ lµm gi¶m khèi
l−îng c«ng viÖc do ch−¬ng tr×nh ®−îc t¸ch ra lµm hai phÇn : phÇn viÕt
c¸c ®o¹n m· (code) vµ phÇn thiÕt kÕ giao diÖn cho ch−¬ng tr×nh. PhÇn
viÕt c¸c ®o¹n m· sÏ tÝnh to¸n d÷ liÖu vµ thÓ hiÖn trªn c¸c trang HTML
th«ng qua c¸c biÕn FastTemplate. PhÇn giao diÖn sÏ thiÕt kÕ giao diÖn
cho ch−¬ng tr×nh b»ng ng«n ng÷ HTML. Trong phÇn nµy chóng ta cã thÓ
lång vµo trang HTML c¸c ng«n ng÷ nh− Java Applet, JavaScript, ... cho
trang web thªm sinh ®éng. ViÖc thªm vµo trang HTML nh÷ng ®o¹n m·
nµy kh«ng lµm ¶nh h−ëng tíi phÇn ®o¹n m· PHP. Khi ®ã, ë vÞ trÝ nµo
trªn trang web cÇn thÓ hiÖn c¸c kÕt qu¶ tÝnh to¸n tõ ®o¹n m· th× sÏ sö
dông c¸c biÕn FastTemplate ®Ó thÓ hiÖn.
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
57
II. Ph−¬ng ph¸p FastTemplate
1. BiÕn FastTemplate
BiÕn FastTemplate lµ g× ?
C¸c biÕn FastTemplate cã cÊu tróc nh− sau :
{TEN_BIEN_FASTTEMPLATE}
BiÕn ®−îc ®Æt trong dÊu ®ãng më ngoÆc nhän, tªn biÕn ë gi÷a, tªn cã thÓ
lµ ch÷ hoa hoÆc ch÷ th−êng. Tuy nhiªn trong phÇn ®o¹n m· PHP b¹n
còng ph¶i viÕt gièng nh− vËy.
2. VÞ trÝ ®Æt biÕn FastTemplate
C¸c biÕn FastTemplatse cã thÓ ®Æt bÊt kú ®©u trong trang HTML. Nã
cã thÓ lµ biÕn thÓ hiÖn th«ng tin trªn c¸c trang HTML khi ®−îc browser hiÓn
thÞ hoÆc c¸c biÕn sÏ thªm vµo c¸c ®o¹n m· HTML .
VÝ dô : ta ®Æt tªn tÖp lµ : vidu_template.tpl
<HTML>
<HEAD>
<TITLE>{TITLE}</TITLE>
</HEAD>
<BODY>
{CONTENT}
</BODY>
</HTML>
Trong vÝ dô trªn cã hai biÕn FastTemplate lµ {TITLE} vµ
{CONTENT}. BiÕn {CONTENT} sÏ thÓ hiÖn th«ng tin trªn trang web khi
®−îc hiÓn thÞ, biÕn {TITLE} ®−îc thªm vµo nh− mét thµnh phÇn cña m·
HTML .
3. Mét vÝ dô minh häa
Theo vÝ dô trªn chóng ta ®· cã tÖp “vidu_template.tpl”, b©y giê chóng ta
®i x©y dùng ®o¹n script sau :
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
58
<?php
include “class.FastTemplate.php”;
# khai b¸o mét ®èi t−îng thuéc líp FastTemplate
$tpl = new FastTemplate(“.”);
# §Þnh nghÜa mét b¶n ®å c¸c tÖp FastTemplate
$tpl->set_filenames(array(“body” => “vidu_template.tpl ”));
# G¸n c¸c gi¸ trÞ cho biÕn FastTemplate
$tpl->assign_vars(array(
“TITLE” => “Vi du”,
“CONTENT” => “Néi dung cña trang web” ));
# Cho hiÖn trang web nµy
$tpl->pparse(“body”);
?>
4. Bèn b−íc cho mét trang web .
Trong mét script cÇn thùc hiÖn bèn bíc theo thø tù sau :
B−íc 1 : Khai b¸o mét ®èi t−îng thuéc líp FastTemplate
B−íc 2 : G¸n c¸c tÖp chøa m· HTML (tÖp nµy cã phÇn më réng kh«ng
nhÊt thiÕt lµ *.htm) cho c¸c phÇn tö cña m¶ng ®−îc ®Þnh nghÜa bëi ph−¬ng
thøc set_filenames() ( b−íc nµy ®−îc gäi lµ “®Þnh nghÜa mét b¶n ®å c¸c tÖp
FastTemplate” ) .
B−íc 3 : G¸n gi¸ trÞ cho c¸c biÕn FastTemplate trong c¸c tÖp .
B−íc 4 : Cho hiÖn trang web b»ng ph−¬ng thøc
pparse(“tªn_trang_web”)
Chó ý :
+ B−íc 2: Trong “®Þnh nghÜa mét b¶n ®å c¸c tÖp FastTemplate” cã thÓ
nhiÒu tÖp ®−îc g¸n .
+ B−íc 4: Mçi lÇn gäi ph−¬ng thøc pparse(); chØ ®−îc mét tÖp
FastTemplate.
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
59
+ C¸c b−íc 1,2,3,4 cã thÓ lÆp l¹i nhiÒu lÇn .
+ Thø tù gäi ph−¬ng thøc pparse(); lµ rÊt quan träng v× nã ¶nh h−ëng
®Õn c¸ch thÓ hiÖn cña trang web.
5. Khèi FastTemplate
Th«ng tin trªn trang web cã thÓ ®−îc thÓ hiÖn d−íi d¹ng b¶ng, víi sè
hµng kh«ng x¸c ®Þnh do ®ã FastTemplate cã hç trî “khèi FastTemplate”.
Khèi FastTemplate sÏ lÆp ®i lÆp l¹i mét ®o¹n HTML nµo ®ã khi ®−îc ®¸nh
dÊu khèi. XÐt vÝ dô sau :
H·y thùc hiÖn phÐp tÝnh 2a
víi a = 1, ..., n. KÕt qu¶ ®−îc thÓ hiÖn bëi
mét b¶ng gåm hai cét, cét gi¸ trÞ cña a vµ cét kÕt qu¶ cña phÐp tÝnh 2a
.
Chóng ta t¹o tÖp
“tinh_2_mu.htm”
<html>
<head>
<title>Tinh 2 mu a</title>
</head>
<body>
<table border="1"
width="100%">
<tr>
<td width="50%">
<p align="center">Gia tri a</td>
<td width="50%">
<p align="center">Tinh 2ª</td>
</tr>
<!-- BEGIN block -->
<tr>
<td width="50%">
<p align="center">{block.GIATRI}</td>
<td width="50%">
<p align="center">{block.KETQUA}</td>
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
60
</tr>
<!-- END block -->
</table>
</body>
</html>
Ta thÊy tÖp nµy t¹o mét b¶ng hai hµng hai cét, hµng trªn lµ tiªu ®Ò cña
c¸c cét, hµng d−íi cét thø nhÊt lµ gi¸ trÞ cña a vµ cét thø hai lµ kÕt qu¶ cña
phÐp tÝnh 2a
. Hµng d−íi ®−îc b¾t ®Çu bëi kho¸ <!-- BEGIN block --> vµ kÕt
thóc bëi kho¸ <!-- END block-->. Hai kho¸ nµy cho biÕt phÇn bªn trong sÏ bÞ
lÆp (block ë ®©y lµ tªn kho¸), c¸c biÕn FastTemplate bªn trong cã d¹ng
{tenkhoa.TEN_BEN}.
§o¹n PHP Script sÏ nh− sau :
<?php
include "class.FastTemplate.php";
$tpl = new FastTemplate(".");
$tpl->set_filenames(array(
'tinh_2_mu_a' => 'tinh_2_mu.htm'
));
$n = 10;
for ($i = 1 ; $i <= $n ; $i++)
$tpl->assign_block_vars("block",array(
'GIATRI' => $i,
'KETQUA' => pow(2, $i)
));
$tpl->pparse("tinh_2_mu_a");
?>
KÕt qu¶ khi ch¹y ch−¬ng tr×nh nh− h×nh vÏ.
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
61
PhÇn II : HÖ C¥ Së D÷ LIÖU MYSQL
Ch−¬ng I. Giíi thiÖu Ng«n ng÷ MySQL
I. Giíi thiÖu chung
MySQL rÊt phøc t¹p, nh−ng giao diÖn SQL trùc gi¸c vµ dÓ häc. Trong
ch−¬ng nµy chóng ta m« t¶ kh¸i qu¸t vÒ c¸c lÖnh, c¸c kiÓu d÷ liÖu vµ c¸c
hµm mµ chóng ta cÇn biÕn ®Ó sö dông Mysql mét c¸ch cã hiÖu qu¶ vµ cã
hiÖu suÊt cao.
Ch−¬ng nµy cung cÊp tÊt c¶ c¸c hµm tham kh¶o trong Mysql. §Ó sö dông
ch−¬ng nµy cã hiÖu qu¶ b¹n cã thÓ t×m ®Õn hµng lo¹t c¸c b¶ng ®· ®−îc liÖt
kª.
C¸c −u ®iÓm cña MySQL:
• MySQL lµ mét hÖ qu¶n trÞ nhá, b¶o mËt, vµ rÊt dÔ sö dông, th−êng
®−îc sö dông cho c¸c øng dông nhá vµ trung b×nh. Nã ®−îc sö
dông cho c¸c øng dông client / server víi m¸y chñ m¹nh nh−
UNIX, Windows NT vµ Windows 95/98, vµ ®Æc biÖt trªn m¸y chñ
UNIX .
• MySQL hç trî c¸c ®iÓm vµo lµ ANSI SQL92 vµ ODBC møc 0-2
SQL chuÈn.
• MySQL hç trî nhiÒu ng«n ng÷ cho viÖc th«ng b¸o lçi nh− : Czec,
Dutc, English, Estonian, French, German, Hungarian, Italian,
Norwegian Nynorsk, Polish, Portuguese, Spanish and Swedish.
Ng«n ng÷ ®−îc hç trî mÆc ®Þnh cho d÷ liÖu lµ ISO-8859-1
(Latin1), muèn thay ®æi ph¶i söa trong m· nguån .
• Ng«n ng÷ lËp tr×nh sö dông viÕt c¸c hµm API ®Ó th©m nhËp c¬ së
d÷ liÖu MySQL cã thÓ lµ C, Perl, PHP.. .
• C¸c b¶ng (table) trong c¬ së d÷ liÖu MySQL cã kÝch th−íc rÊt lín
vµ ®−îc l−u ë th− môc Datas. KÝch th−íc lín nhÊt cña mét b¶ng tèi
thiÓu lµ 4GB vµ nã cßn phô thuéc vµ kÝch th−íc lín nhÊt cña mét
file do hÖ ®iÒu hµnh quy ®Þnh .
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
62
• C¬ së d÷ liÖu MySQL rÊt dÔ qu¶n lý vµ cã tèc ®é xö lý cao h¬n tíi
ba bèn lÇn so víi c¸c hÖ qu¶n trÞ c¬ së d÷ liÖu kh¸c.
• MySQL lµ mét hÖ qu¶n trÞ c¬ së d÷ liÖu m« h×nh quan hÖ, nã cã m·
nguån më. Nã ®−îc cung cÊp miÔn phÝ trªn c¸c m¸y chñ UNIX,
OS/2 vµ c¶ trªn Windows.
Bªn c¹nh c¸c −u ®iÓm trªn MySQL còng cã mét vµi nh−îc ®iÓm :
• MySQl kh«ng cho phÐp thùc hiÖn c¸c c©u lÖnh SQL select truy vÊn
con. VÝ dô : SELECT deptno, ename, sal
FROM emp x
WHERE sal > (SELECT AVG(sal)
FROM emp
WHERE x.deptno = deptno)
ORDER BY deptno
• MySQL kh«ng hç trî Stored Procedures, Triggers, Transactions,
Foreign Keys, vµ Views nh− c¸c hÖ qu¶n trÞ c¬ së d÷ liÖu kh¸c .
II .CÊu tróc ng«n ng÷
1. §−a ra mét x©u vµ mét sè nh− thÕ nµo
Môc nµy m« t¶ nh÷ng c¸ch kh¸c nhau ®Ó ®−a ra x©u vµ sè trong Mysql. môc
nµy còng bao gåm nhiÒu s¾c th¸i vµ ``gotchas'' ®iÒu mµ b¹n cã thÓ gÆp khi ®i
s©u vµo c¸c kiÓu c¬ b¶n trong Mysql.
2. X©u
X©u lµ mét d·y kÝ tù, ®−îc ®Æt trong dÊu nh¸y ®¬n ‘ ’ hoÆc dÊu nh¸y kÐp
“ ” (nÕu ch¹y trong ph−¬ng thøc ANSI th× x©u chØ ®−îc ®Æt trong dÊu
nh¸y ®¬n)
VÝ dô: ‘trêi n¾ng’.
“chµo buæi s¸ng”.
Trong mét x©u, cã sù kÕt hîp cña c¸c kÝ tù t¹o nªn c¸c kÝ tù ®Æc biÖt. Mçi
kÝ tù ®Æc biÖt nµy b¾t ®Çu b»ng dÊu chÐo ng−îc (  ) ®−îc xem nh− kÝ tù
escape .
Mysql nhËn biÕt c¸c kÝ tù ®Æc biÖt sau:
 0 : kÝ tù 0 trong m· ASCII.
’ : KÝ tù nh¸y ®¬n ‘.
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
63
” : KÝ tù nh¸y kÐp “.
 b : KÝ tù Backspace.
n : KÝ tù xuèng dßng míi.
r : KÝ tù vÒ ®Çu dßng .
t : NhÈy « (tab).
z : KÝ tù 26 trong m· ASCII. KÝ tù nµy cã thÓ ®−îc m· ho¸ ®Ó ®øng ë
cuèi file trong Windows.
 : KÝ tù chÐo ng−îc  .
% : KÝ tù % .
 _ : KÝ tù g¹ch d−íi _ .
chó ý : nÕu nh− sö dông kÝ tù ‘%’ hoÆc kÝ tù g¹ch d−íi ‘ _’ trong mét sè
tr−êng hîp cã thÓ tr¶ vÒ % vµ  _ chø kh«ng ph¶i lµ % vµ _ .
* cã mét sè c¸ch ®Ó x©u gåm c¶ dÊu nh¸y :
- ®Ó mét dÊu nh¸y ®¬n ( ‘ ) n»m trong mét x©u ®−îc ®¸nh dÊu bëi dÊu
nh¸y ®¬n th× ph¶i viÕt lµ: ‘ ‘ ’ ’ .
- ®Ó mét dÊu nh¸y kÐp ( “ ) n»m trong mét x©u ®−îc ®¸nh dÊu bëi dÊu
nh¸y ®¬n th× ph¶i viÕt lµ: ‘ “ ” ’ .
- cã thÓ ®Æt kÝ tù (‘’) tr−íc kÝ tù ®¸nh dÊu .
- mét dÊu nh¸y ®¬n trong cÆp dÊu nh¸y kÐp ®−a ra x©u chøa dÊu nh¸y
®¬n, mét dÊu nh¸y kÐp trong cÆp dÊu nh¸y ®¬n ®−a ra x©u chøa dÊu
nh¸y kÐp.
- VÝ dô :
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo',''hello';
------------------------------------------
| hello | "hello" | ""hello"" | hel'lo | 'hello |
-------------------------------------------
mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", ""hello";
-------------------------------------------
| hello | 'hello' | ''hello'' | hel"lo | "hello |
-------------------------------------------
mysql> SELECT "ThisnIsnFournlines";
--------------------
| This
Is
Four
lines |
--------------------
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
64
nÕu b¹n muèn chÌn d÷ liÖu nhÞ ph©n vµo trong cét BLOB. Nh÷ng kÝ tù
sau ph¶i ®−îc thÓ hiÖn d−íi d¹ng nh÷ng kÝ tù ®Æc biÖt :
- NUL : ASCII 0. ph¶i ®−îc thÓ hiÖn ‘  0 ’ .
-  : ASCII 92. dÊu g¹ch ng−îc ph¶i ®−îc thÓ hiÖn ‘  ’ .
- ’ :ASCII 39. dÊu nh¸y ®¬n ph¶i ®ù¬c thÓ hiÖn ‘ ’ ’ .
- ” : ASCII 34. dÊu nh¸y kÐp ph¶i ®−îc thÓ hiÖn ‘ ” ’.
- nÕu biÕt m· C, cã thÓ sö dông hµm CAPI lµ Mysql-escape-string() ®Ó
ESC kÝ tù b»ng c©u lÖnh INSERT.
- Nªn sö dông hµm ESC ®èi víi nh÷ng x©u chøa kÝ tù ®Æc biÖt ®−îc liÖt
kª ë trªn.
3. Sè (Numbers)
S« bao gåm sè nguyªn vµ sè thùc .
Sè nguyªn ®−îc biÓu diÔn b»ng mét d·y sè. Cßn sè thùc sö dông dÊu
chÊm ®Ó ph©n c¸ch phÇn thËp ph©n .
DÊu g¹ch d−íi ®ù¬c ®Æt tr−íc sè ®Ó chØ sè ©m.
VÝ dô:
1221
0
32
VÝ dô cho sè thùc:
94.42
32032.6809e10
48.00
chó ý : sè nguyªn ®−îc sö dông trong ng÷ c¶nh sè thùc ®−îc chuyÓn
thµnh sè thùc cã gi¸ trÞ ngang b»ng
vÝ dô : float 0 0.0
float 56 -> 56.0
Nh÷ng gi¸ trÞ hÖ Hexa (hÖ 16)
Mysql hç trî c¸c gi¸ trÞ hÖ Hexa. Trong ng÷ c¶nh sè th× chóng gièng
nh− mét sè nguyªn. Trong ng÷ c¶nh x©u th× chóng gièng nh− mét x©u nhÞ
ph©n mµ mçi cÆp sè nguyªn Hexa ®−îc chuyÓn thµnh mét kÝ tù .
VÝ dô:
mysql> SELECT x'FF'
-> 255
mysql> SELECT 0xa0;
-> 10
mysql> select 0x5061756c;
-> Paul
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
65
ë vÝ dô trªn khi viÕt mét sè d−íi d¹ng Hexa b¹n ph¶i ®iÒn vµo vµo tr−íc sè
®ã chuçi ‘x’ hoÆc ‘0x’. Có ph¸p x ‘x©u Hexa’ dùa trªn ANSISQL, vµ có
ph¸p 0x dùa trªn ODBC. X©u hÖ Hexa th−êng sö dông ODBC ®Ó ®−a gi¸ trÞ
cho cét BLOB Cã thÓ chuyÓn mét x©u hoÆc sè thµnh hÖ Hexa b»ng hµm
HEX().
4. Gi¸ trÞ NULL
Gi¸ trÞ NULL cã nghÜa lµ “kh«ng cã d÷ liÖu”(“no data”) kh¸c víi gi¸ trÞ
0 ®èi víi kiÓu sè vµ x©u rçng ®èi víi kiÓu x©u .
Trong khu«n d¹ng xuÊt hoÆc nhËp File d÷ liÖu NULL cã thÓ ®−îc thÓ
hiÖn b»ng ‘N’ (nh− LOAD DATA INFILE, SELECT...INTO OUTFILE).
5. Tªn cña C¬ së d÷ liÖu, b¶ng, chØ sè cét vµ bÝ danh
Tªn cña c¬ së d÷ liÖu, b¶ng, chØ sè cét vµ bÝ danh tÊt c¶ ®Òu tu©n theo
mét qui luËt chung trong Mysql. Nh−ng chó ý r»ng qui luËt nµy ®·
®−îc thay ®æi b¾t ®Çu víi Mysql Version 3.23.6 khi chóng ta d−a vµo
lêi chó thÝch cho viÖc nhËn biÕt c¬ së d÷ liÖu, b¶ng vµ tªn cét víi dÊu ‘
‘ ’ ’ .’ ” ’sÏ lµm viÖc nhËn ra lêi chó thÝch nÕu b¹n ch¹y trong chÕ ®é
ANSI .
§Þnh danh
(Identifier)
§é dµi C¸c kÝ tù cho phÐp
Database
(c¬ së d÷liÖu)
64 TÊt c¶ c¸c kÝ tù cho phÐp trong th− môc
ngo¹i trõ ‘/’ vµ ‘.’
Table
(B¶ng)
64 TÊt c¶ c¸c kÝ tù cho phÐp víi tªn File ngo¹i
trõ ‘/’ vµ ‘.’
Column
(Cét)
64 Cho phÐp tÊt c¶ c¸c kÝ tù
Alias
(BÝdanh)
256 Cho phÐp tÊt c¶ c¸c kÝ tù
Chó ý: ë b¶ng trªn ®Þnh danh kh«ng thÓ cã kÝ tù ®¸nh dÊu, ASCII(0)
hoÆc ASCII(255) .
NÕu ®Þnh danh lµ mét tõ bÞ h¹n chÕ hoÆc trong ®ã cã chøa c¸c kÝ tù
®Æc biÖt th× b¹n ph¶i sö dông dÊu nh¸y ®¬n ®Ó chó thÝch khi sö dông
chóng .
VÝ dô: SELECT * from `select` where `select`.id > 100;
Trong phiªn b¶n tr−íc cña Mysql, luËt ®Æt tªn nh− sau :
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
66
- Mét tªn gåm c¸c kÝ tù trong b¶ng m·, còng cho phÐp kÝ tù g¹ch d−íi
‘_’ vµ ‘$’.
- Tªn cã thÓ b¾t ®Çu bëi tÊt c¶ c¸c kÝ tù hîp ph¸p, trong thùc tÕ tªn cã
thÓ b¾t ®Çu b»ng mét sè (®iÒu nµy kh¸c nhiÒu víi hÖ c¬ së d÷ liÖu )tuy
nhiªn tªn kh«ng chØ gåm mét sè .
- Kh«ng ®−îc sö dông kÝ tù ‘.’ Trong tªn bëi v× kÝ tù ®ã ®−îc sö dông
®Ó më réng khu«n d¹ng ®Ó truy nhËp ®Õn cét (xem ë b¶ng d−íi ®©y).
Chóng ta kh«ng nªn dïng nh÷ng tªn nh− 1e bëi v× mét biÓu thøc nh−
1e1th× rÊt m¬ hå, nã cã thÓ ®−îc biªn dÞch lµ mét biÓu thøc 1e1 hoÆc lµ
sè 1e1.
Trong Mysql ta cã thÓ liªn hÖ tíi mét cét b»ng viÖc sö dông nh÷ng c¸ch
sau:
Cét tham chiÕu ý nghÜa
Col_name Cét col_name tõ b¶ng sö dông trong c©u truy vÊn
chøa cét víi tªn nµy.
Tbl_name.col_name Cét col_name tõ b¶ng tbl_name cña c¬ së d÷ liÖu
hiÖn thêi .
Db_name.tbl_name.
col_name
Cét col_name tõ b¶ng tbl_name cña c¬ së d÷ liÖu
Db_name.
‘column_name’ Mét cét cã chøa kÝ tù ®Æc biÖt hoÆc tõ kho¸
B¹n cÇn ph¶i chØ râ tbl_name hoÆc db_name.tbl_name ®èi víi nh÷ng cét cã
cïng tªn trong nhiÒu b¶ng cña c¬ së d÷ liÖu, hoÆc b¶ng cã cïng tªn trong c¸c
c¬ së d÷ liÖu kh¸c nhau ®Ó tr¸nh sù nhËp nh»ng .
VÝ dô : gi¶ sö mçi b¶ng T1 ,T2 chø mét cét C b¹n cã thÓ lÊy C trong mét
lÖnh SELECT sö dông c¶ T1 vµ T2. Trong tr−êng hîp nµy C nhËp nh»ng bëi
v× nã kh«ng duy nhÊt gi÷a c¸c b¶ng ®−îc sö dông trong c©u lÖnh. B¹n ph¶i
chØ ra tªn b¶ng b»ng c¸ch viÕt T1.C hoÆc T2.C. t−¬ng tù nÕu b¹n lÊy tõ mét
b¶ng T trong c¬ së d÷ liÖu DB1 vµ tõ b¶ng T trong c¬ së d÷ liÖu DB2, b¹n
ph¶i tham chiÕu ®Õn cét trong nh÷ng b¶ng ®ã nh− sau : DB1.T.col_name vµ
DB2.T.col_name.
Có ph¸p .Tbl_name cã nghÜa lµ b¶ng Tbl_name n»m trong c¬ së d÷ liÖu hiÖn
thêi .có ph¸p nµy ®−îc chÊp nhËn cho t−¬ng thÝch ODBC bëi v× mét sè
ch−¬ng tr×nh ODBC thªm vµo ®Çu tªn b¶ng mét dÊu chÊm ‘.’
6. Ph©n biÖt ch÷ hoa vµ ch÷ th−êng ®èi víi tªn trong Mysql :
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
67
Trong Mysql tªn c¬ së d÷ liÖu, b¶ng trong Windows th× kh«ng ph©n biÖt ch÷
hoa vµ ch÷ th−êng, cßn trong Unix th× cã ph©n biÖt ch÷ hoa vµ ch÷ th−êng .
Chó ý : mÆc dï trong windows kh«ng ph©n biÖt ch÷ hoa vµ ch÷ th−êng, b¹n
còng kh«ng nªn dïng tªn c¬ së d÷ liÖu, b¶ng víi c¸c tr−êng hîp kh¸c nhau
trong cïng mét c©u truy vÊn .
VÝ dô :
mysql> SELECT * FROM my_table WHERE MY_TABLE.col=1;
c©u lÖnh trªn sÏ kh«ng thùc hiÖn ®−îc .
Tªn cét kh«ng ph©n biÖt ch÷ hoa vµ ch÷ th−êng trong tÊt c¶ c¸c tr−êng hîp .
BÝ danh trªn b¶ng ph©n biÖt ch÷ hoa vµ ch÷ th−êng
VÝ dô: mysql> SELECT col_name FROM tbl_name AS a
WHERE a.col_name = 1 OR A.col_name = 2;
C©u lÖnh trªn sÏ kh«ng thùc hiÖn ®−îc v× bÝ danh ph©n biÖt ‘a’ vµ ‘A’
BÝ danh trªn cét sÏ kh«ng ph©n biÖt ch÷ hoa vµ ch÷ th−êng.
NÕu b¹n muèn truy vÊn thùc hiÖn ®−îc trªn b¶ng th× chÊp nhËn mét qui
−íc lu«n lu«n t¹o ra tªn c¬ së d÷ liÖu vµ tªn b¶ng sö dông ch÷ th−êng.
Mét c¸ch tr¸nh vÊn ®Ò nµy lµ sÏ b¾t ®Çu mysql víi
-0 lower_case_table_names = 1, Theo mÆc ®Þnh tïy chän nµy lµ 1 trªn
Windows vµ 0 trªn Unix. NÕu lower_case_table_names lµ 1 MySQL sÏ
chuyÓn ®æi tÊt c¶ c¸c tªn b¶ng vÒ ch÷ th−êng ,Chó ý r»ng nÕu b¹n thay ®æi
tïy chän nµy, b¹n cÇn tr−íc hÕt chuyÓn ®æi nh÷ng tªn b¶ng cò cña b¹n vÒ
ch÷ th−êng tr−íc khi b¾t ®Çu mysql.
7. BiÕn ng−êi sö dông
Mysql hæ trî c¸c biÕn riªng cïng víi có ph¸p @variable name. Tªn biÕn bao
gåm kÝ tù anpha t− tËp c¸c kÝ tù vµ thªm vao kÝ tù ‘_’, ’$’, vµ ‘.’
BiÕn kh«ng ph¶i khëi t¹o, NULL kh«ng xuÊt hiÖn trong biÕn, biÕn cã thÓ
chøa sè nguyªn thùc hoÆc gi¸ trÞ x©u. TÊt c¶ c¸c biÕn sÏ tù gi¶i phãng vïng
nhí khi chóng tho¸t ra.
B¹n cã thÓ g¸n biÓu thøc vµo biÕn theo có ph¸p : @variable:=expr
VÝ dô:
select @t1:=(@t2:=1)@t3:=4,@t1,@t2,@t3;
------------------------------------------------
| @t1:=(@t2:=1)@t3:=4 | @t1 | @t2 | @t3 |
-----------------------------------------------
| 5 | 5 | 1 | 4 |
------------------------------------------------
chóng ta ph¶i sö dông có ph¸p:= ®Ó g¸n biÕn, bëi v× dÊu b»ng (= ) ®−îc sö
dông ®Ó so s¸nh .
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
68
biÕn cã thÓ ®−îc sö dông trong mét biÓu thøc l−u ý r»ng ®iÒu nµy kh«ng
®−îc sö dông trong ng÷ c¶nh mét sè ®−îc yªu cÇu râ rµng nh− trong mÖnh
®Ò LIMIT cña lÖnh select hoÆc mÖnh ®Ò IGNORE number LINES cña lÖnh
LOAD DATA .
chó ý : trong lÖnh SELECT mçi biÓu thøc chØ nhËn mét gi¸ trÞ khi nã ®−îc
göi cho ng−êi dïng. §iÒu nµy còng ®óng trong mÖnh ®Ò HAVING, GROUP
BY, ORDER BY. B¹n kh«ng thÓ tham chiÕu tíi mét biÓu thøc gåm tËp hîp
c¸c biÕn trong SELECT.
VÝ dô:
SELECT (@aa:=id) AS a, (@aa3) AS b FROM table_name HAVING b=5;
C©u lÖnh trªn kh«ng thùc hiÖn ®−îcbëi v× @aa sÏ kh«ng chøa gi¸ trÞ ë hµng
hiÖn t¹i trõ phi gÝ trÞ cña id thay cho cét ®· ®−îc chÊp nh¹n tr−íc .
8. C¸c dßng chó thÝch
Mysql cho phÐp chÌn c¸c c©u chó thÝch vµo trong kÞch b¶n cña Mysql, khi
thùc hiÖn tr×nh th«ng dÞch sÏ bá qua tÊt c¶ c¸c ®o¹n v¨n b¶n lµ c©u chó thÝch
Trong Mysql chó thÝch ®−îc ®Æt sau dÊu : # dßng chó thÝch
-- dßng chó thÝch
c¸ch viÕt nµy chØ cã t¸c dông trªn mét dßng .
dïng cÆp kÝ hiÖu sau : /* ....*/ ®Ó chÌn c¸c c©u chó thÝch, lo¹i chó thÝch nµy
®−îc gäi lµ chó thÝch khèi .
vÝ dô: mysql> select 11; # chó thÝch trªn mét dßng
mysql> select 11; -- chó thÝch trªn mét dßng
mysql> select 1 /* chó thÝch khèi*/ 1;
mysql> select 1
/*
chó thÝch trªn nhiÒu dßng
chó thÝch khèi
*/
1;
l−u ý r»ng chó thÝch – yªu cÇu b¹n ph¶i cã Ýt nhÊt mét dÊu c¸ch sau --!
MÆc dï vËy cã vµi h¹n chÕ trong c¸ch ghi chó *..* ®ã lµ:
- kÝ tù nh¸y ®¬n vµ nh¸y ®«i dïng ®Ó chØ sù b¾t ®Çu cña mét x©u thËm
chÝ sö dông bªn trong mét chó thÝch nÕu trong chó thÝch dÊu nh¸y thø
nhÊt kh«ng phï hîp víi dÊu nh¸y thø hai th× hÖ ph©n tÝch sÏ kh«ng
nhËn ra ®iÓm kÕt thóc cña ghi chó.
- dÊu chÊm phÈy ( ; ) ®−îc dïng ®Ó b¸o kÕt thóc cña mét c©u lÖnh
Mysql vµ sau dÊu ( ; ) lµ sù b¾t ®Çu cña c©u lÖnh tiÕp theo.
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
69
Ch−¬ng II. C¸c thµnh phÇn cña My SQL
Trong phÇn nµy chóng ta giíi thiÖu kh¸i qu¸t vÒ c¸c kiÓu d÷ liÖu cña
c¸c tr−êng va c¸c thuéc tÝnh vÒ kiÓu trong mçi lo¹i d÷ liÖu.Sau ®ã lµ
mét sè kiÓu b¶ng trong MySQL vµ cuèi cïng lµ mét sè hµm c¬ b¶n
®−îc cung cÊp bëi MySQL.
I. C¸c kiÓu d÷ liÖu
Trong MySQL cã c¸c kiÓu d÷ liÖu sau:
KiÓu sè
KiÓu kÝ tù (char,varchar,Blob,Text,Enum,Set)
KiÓu x©u.
KiÓu ngµy giê (Datetime,Date,TimeStamp,Time,year)
1. KiÓu sè
KiÓu tinyint:
Khai b¸o TINYINT[Cm] [UNSGNED] [ZEROFIU].§©y lµ kiÓu sè
nguyªn víi gi¸ trÞ rÊt nhá:
-NÕu khai b¸o víi tõ kho¸ nusigned th× gi¸ trÞ mµ cét cã kiÓu
nµy cã thÓ n»m trong kho¶ng 0 ®Õn 255.
-NÕu kh«ng cã tõ khãa nusiged th× gi¸ trÞ trong kho¶ng –128
®Õn 127
KiÓu Smallint
Khai b¸o:Smallint [Cm] [nusiged] [zerofill].§©y lµ kiÓu sè nguyªn cã
gi¸ trÞ nhá:
-NÕu lµ sè cã dÊu th× gi¸ trÞ n»m trong kho¶ng-32768 ®Õn 32767
-NÕu lµ sè kh«ng dÊu th× gi¸ trÞ trong kho¶ng 0 ®Õn 65536.
KiÓu Mediumint
Khai b¸o :Mediumint [cm] [nusiged] [zerofill] [(m)]
-NÕucã dÊu th× gi¸ trÞ n»m trong kho¶ng –8388608 ®Õn
8388607.
-NÕu lµ sè cã dÊu th× gi¸ trÞ n»m trong kho¶ng 0 ®Õn 16777215.
KiÓu Int:
Khai b¸o:Int:[Cm] [nusiged] [zerofill]
-Víi sè cã dÊu gi¸ trÞ trong kho¶ng –2147483648 ®Õn
2147483647
-Víi sè kh«ng dÊu gi¸ trÞ trong kho¶ng 0 ®Õn 429467295
KiÓu Interger
Khai b¸o:interger [Cm] [nusiged] [zerofill].T−¬ng tù kiÓu INT.
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
70
KiÓu Bigint
Khai b¸o :Bigint [Cm] [nusiged] [zerofill].§©y lµ kiÓu nguyªn mµ gi¸
trÞ lµ rÊt lín.
-Víi sè cã dÊu gi¸ trÞ trong kho¶ng
–9223372036854775808 ®Õn 9223372036854775807.
-Víi sè kh«ng dÊu gi¸ trÞ trong kho¶ng 0 ®Õn
18446744073709551615
Note:tÊt c¶ c¸c phÐp to¸n sè häc sö dông sè cã dÊu bigint hoÆc double,
v× vËy kh«ng sö dông sè kh«ng dÊu ,mµ gi¸ trÞ v−ît qu¸ sè nguyªn lín
tøc lµ nÕu nh©n hai sè nguyªn lín th× gi¸ trÞ tr¶ vÒ sÏ v−ît qu¸ sè
nguyªn lín cã dÊu.
KiÓu float:
Khai b¸o:float (precision)[zerofill].§èi víi sè thùc ®é chÝnh x¸c ®¬n
th× ®é chÝnh x¸c <24.§èi víi sè thùc ®é chÝnh x¸c kÐp th× ®é chÝnh
x¸c <255.Float(x) gièng kiÓu double,float nh−ng cì vµ sè ch÷ sè phÇn
thËp ph©n ch−a ®−îc ®Þnh nghÜa
Precision:sè ch÷ sè phÇn thËp ph©n mµ float cã thÓ nhËn.Float
[Cm,d] [zerofill]:®©y lµ sè thùc víi ®é chÝnh x¸c kÐp víi m hiÓn thÞ ®é
réng,d lµ sè c¸c ch÷ sè phÇn thËp ph©n.
NÕu dïng float kh«ng cã ®èi hoÆc ®èi <=24,th× t−¬ng øng dïng
sè thùc cã ®é chÝnh x¸c ®¬n.
Double [(Cm,d)] [zerofill]:sè thùc víi ®é chÝnh x¸c kÐp víi m lµ ®é
réng, d lµ sè ch÷ sè phÇn thËp ph©n.Nõu dïng double kh«ng ®èi
hoÆcdïng float(x) víi 25<=x<=53 thay cho mét sè thùc ®é chÝnh x¸c
kÐp.
Double precision [(Cm,d)][zerofill]
Real [(Cm,d)][zerofill] .t−¬ng tù nh− sè double.
Decimal [(Cm,d)][zerofill] ®−îc coi nh− mét kiÓu char,®−îc l−u tr÷
nh− mét x©u mçi kÝ tù lµ mét kÝ sè cña gi¸ trÞ cÇn l−u tr÷.
Nuneric [(Cm,d)][zerofill] t−¬ng tù decimal.
2.KiÓu ngµy giê
2.1 Datime, Date, TimeStamp.
C¸c kiÓu Datime, Data, TimeStamp cã nh÷ng ®Æc tr−ng riªng nh−ng
còng cã mèi liªn quan.
Cã mét sè Y2K chóng ta ®· tõng biÕn ®æi víi c¸c kiÓu thêi gian
kh«ng gian râ rµng trªn
MySQL ®· gi¶i thÝch c¸c ngµy cïng víi gi¸ trÞ n¨m mËp mê
theo quy luËt sau:
-Gi¸ trÞ n¨m trong kho¶ng 70-69 ®−îc chuyÓn sang n¨m 2000-
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
71
2069
-Gi¸ trÞ n¨m trong kho¶ng 70-99 ®−îc chuyÓn sang n¨m 1970-
1999.
§ã lµ v× gi¸ trÞ n¨m ta chØ ®Ó hai ch÷ sè, cßn hai sè tr−íc mÆc
®Þnh lµ n¨m 1900.§Ó lµm cho kh«ng nhÇm lÉn n¨m th× ph¶I cung cÊp
gi¸ trÞ n¨m lµ bèn sè.MySQL ®· lµm ®iÒu nµy.
KiÓu datetime: §©y lµ kiÓu ngµy giê ®−îc dïng khi b¹n cÇn l−u tr÷
th«ng tin c¶ vÒ ngµy th¸ng vµ thêi gian.Gi¸ trÞ cña nã n»m trong
kho¶ng 1000-01-10:00:00 ®Õn ‘9999-12-3123:59:59’
MySQL hiÓn thÞ datatime theo ®Þnh d¹ng:
“yyyy-mm-dd hh:mm:ss” nh−ng nã còng cho phÐp Ên ®Þnh gi¸ trÞ cho
kiÓu nµy b»ng d¹ng sè hoÆc x©u.
KiÓu Date ®−îc dïng khi b¹n chØ cÇn l−u tr÷ gi¸ trÞ ngµy th¸ng.
MySQL truy xuÊt vµ hiÓn thÞ gi¸ trÞ DATE víi ®Þnh d¹ng “yyyy-
mm-dd”
Gi¸ trÞ trong kho¶ng ‘1000-01-01’ ®Õn ‘9999-12-31’cã thÓ Ên
®inh b»ng sè hoÆc x©u.
KiÓu TIMESTAMP [Cm]
Cung cÊp 1 kiÓu mµ b¹n cã thÓ dïng ®Ó ®¸nh dÊu mét c¸ch tù ®éng
®èi víi phÐp INSERT hoÆc UPDATE cïng víi ngµy giê hiÖn t¹i.NÕu
cã nhiÒu cét TIMESTAMP th× chØ cét ®Çu tiªn ®−îc cËp nhËt mét c¸ch
tù ®éng.
§Ó cËp nhËt vµo cét ®Çu nh− vËy còng ph¶i tho¶ m·n c¸c ®iÒu
kiÖn sau:
-Cét mµ chøa ®−îc x¸c ®Þnh chi tiÕt trong mÖnh ®Ò INSERT
hoÆcLOADDATAINFILE
-Cét mµ kh«ng x¸c ®Þnh chi tiÕt trong lÖnh UPDATE vµ mét sè
cét kh¸c ®· thay ®æi gi¸ trÞ
-B¹n ®Æt chi tiÕt cét TIMESTAMP lµ ngµy giê hiÖn t¹i b»ng
c¸ch Ên ®Þnh gi¸ trÞ NULL
C¸c cét kh¸c cã thÓ ®−îc ®Æt thêi gian vµ ngµy th¸ng hiÖn t¹i.ChØ cµ
víi cét gi¸ trÞ NULL hoÆc NOW.Gi¸ trÞ cña TIMESTAMP lµ tõ 1970-
01-01:00:00:00.§Õn n¨m 2037 th× MySQL hiÓn thÞ TIMESTAMP theo
®Þnh d¹ng ‘yyyy mm dd hh mm ss’
‘yyyy mm dd hh mm ss’.MySQL còng cho phÐp sö dông b»ng x©u
hoÆc sè.
KiÓu TIME
MySQL ®Þnh d¹ng gi¸ trÞ thêi gian lµ ‘hh:mm:ss’ hoÆc HHH:MM:SS
Nguyªn nh©n mµ phÇn giê cã thÓ lín h¬n t¹i v× kiÓu TIME kh«ng chØ
biÓu diÔn thêi gian trong 1ngµy (giê ph¶i <24) mµ nã cßn lµ kho¶ng
thêi gian gi÷a hai sù kiÖn (cã thÓ >24 hoÆc thËm chÝ lµ ©m).Gi¸ trÞ cña
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
72
nã trong kho¶ng ‘-838:59:59’ tíi ‘838:59:59’
KiÓu YEAR
Cã thÓ ®Þnh d¹ng bëi hai hoÆc bèn ch÷ sè, gi¸ trÞ n»m trong kho¶ng
1901 ®Õn 2155 víi bèn ch÷ sè.
Víi hai sè th× mÆc ®Þnh tõ 00-69 lµ 2000-2069 ,70 ®Õn 99 lµ 1970-
1999
3.KiÓu kÝ tù (String)
KiÓu char: §é dµi cét char lµ cè ®Þnh khi b¹n t¹o b¶ng. Gi¸ trÞ ®é dµi
trong kho¶ng 0-255 nÕu sè kÝ tù ®iÒn vµo nhá h¬n ®é dµi quy ®Þnh th×
nã sÏ tù ®éng ®iÒn vµo kÝ tù trèng.
Trong MySQL kiÓu char cho phÐp b¹n t¹o mét cét cã d¹ng
char(0),®iÒu nµy còng thuËn tiÖn trong tr−êng hîp b¹n ph¶i tu©n theo
víi sè phÇn mÒm cò nã phô thuéc vµ sù tån t¹i cña mét cét mµ kh«ng
thùc sù cÇn sö dông gi¸ trÞ. Còng tèt trong tr−êng hîp b¹n cÇn ®Þnh
nghÜa mét cét sao cho nã cã thÓ nhËn hai gi¸ trÞ mét cét khai b¸o
char(0) nã cã thÓ chiÕm mét bit vµ cã thÓ nhËn hai gi¸ trÞ NULL hoÆc
“ ”
KiÓu Varchar [national] varchar(m)[binary]. §©y lµ cét ®−îc khai b¸o
víi mét x©u cã ®é dµi kh«ng cè ®Þnh nh÷ng kÝ tù trèng sÏ ®−îc huû
khi l−u tr÷ gi¸ trÞ, m n»m trong kho¶ng 1-255.
value Char(4)
Storage
require
d
Varchar
Storage
require
d
’ ‘ ‘ ’ 4bytes ‘ ’ 1bytes
‘ab’ ‘ab’ 4bytes ‘ab’ 3bytes
‘abcd’ ‘abcd’ 4bytes ‘abcd’ 5bytes
‘abcdefgh’ ‘abcd’ 4bytes ‘abcd’ 5bytes
KiÓu Blob vµ TEXT
-BLOB lµ ®èi t−îng nhÞ ph©n lín cã thÓ chøa l−îng rÊt lín c¸c
d÷ liÖu víi 4 kiÓu BLOB:TINYBLOB, BLOB, MEDIUMBLOB vµ
LONGBLOB.Cã 4 kiÓu TEXT lµ TINYTEXT,TEXT,
MEDIUMTEXT, vµ LONGTEXT
TINYBLOB,TINYTEXT:cã ®é réng tèi ®a lµ255
Blob vµ Text ®é dµi tèi ®a lµ 65535 kÝ tù.
Mediumblob,mediumtext:®é dµi tèi ®a 16777125 kÝ tù.
Longblob,longtext: ®é dµi tèi ®a 424967295 kÝ tù.
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
73
Chó ý: M« h×nh client/server giíi h¹n bëi 16Mb. Mét gãi giao tiÕp
trªn mét hµng nªn kh«ng thÓ sö dông toµn bé ph¹m vi cña kiÓu nµy.
KiÓu ENUM(value1,value2,..)(kiÓu liÖt kª). Mét ®èi t−îng x©u chØ cã
thÓ cã 1 gi¸ trÞ chän tõ mét danh s¸ch c¸c gi¸ trÞ
‘’value1”,”value2”,..null hoÆc kÝ tù ®Æc biÖt.
Mét kiÓu liÖt kª cã gi¸ trÞ lín nhÊt lµ 65535 gi¸ trÞ.
KiÓu tËp hîp set(value1,value2,..) mét ®èi t−îng x©u cã thÓ nhËn 0
hoÆc nhiÒu h¬n mçi lo¹i cã thÓ chän tõ danh s¸ch c¸c gi¸ trÞ
:”value1”,”value2”, .. Mét tËp hîp cã tèi ®a 64 thµnh phÇn.
Gi¸ trÞ null nghÜa lµ kh«ng cã d÷ liÖu,nã kh¸c gi¸ trÞ 0 vµ x©u rçng.
Gi¸ trÞ null cã thÓ ®−îc kÝ hiÖu bëi n cho viÖc truy xuÊt file
d¹ng text.
4 .Cét chØ sè.
TÊt c¶ c¸c kiÓu cét cña MySQL cã thÓ ®−îc chØ sè ho¸ .ViÖc dïng chØ
sè ho¸ trªn c¸c cét cã liªn quan víi nhau lµ c¸ch tèt nhÊt ®Ó c¶i tiÕn
viÖc thùc hiÖn cña c©u lÖnh Select.
Mét b¶ng cã thÓ cã tíi 16 cét chØ sè, ®é dµi chØ sè tèi ®a lµ 256
bytes ,mÆc dï cã thÓ thay ®æi khi biªn dÞch MySQL.
§èi víi cét kiÓu char vµ varchar b¹n cã thÓ chØ sè ho¸ phÇn ®Çu
cña cét.Nh− vËy sÏ nhanh h¬n vµ cÇn Ýt kh«ng gian ®Üa h¬n lµ chØ sè
ho¸ trong c¶ cét.Có ph¸p dïng trong mÖnh ®Ò CREATE TABLE nh−
sau:
KEY index_name(colname(length)).
VÝ dô sau sÏ t¹o mét chØ sè ho¸ cho 10 kÝ tù ®Çu cña cét tªn:
MySQL>CREATE TABLE test(
Name char(200)not NULL
KEY index_name(name(10)))
§èi víi cét kiÓu BLOB vµ TEXT, b¹n ph¶i chØ sè ho¸ mét phÇn ®Çu
cña cét, kh«ng thÓ chØ sè ho¸ c¶ cét ®−îc.
T¹o chØ sè trªn nhiÒu cét.
MySQL cã thÓ t¹o chØ sè trªn nhiÒu cét. Mét viÖc chØ sè ho¸ cã
thÓ lªn tíi 15 cét(trªn cét char vµ varchar b¹n cã thÓ chØ sè ho¸ phÇn
®Çu cña cét nh− mét phÇn cña viÖc chØ sè ho¸).
ViÖc chØ sè ho¸ nhiÒu cét ®−îc xem nh− mét m¶ng ®−îc s¾p
xÕp mµ chøa c¸c gi¸ trÞ ®−îc t¹o bëi viÖc kÕt nèi c¸c gi¸ trÞ gi÷a c¸c
cét ®−îc chØ sè ho¸ .
Mysql sö dông chØ sè ho¸ nhiÒu cét nh− lµ c¸ch ®Ó truy vÊn
nhanh h¬n khi b¹n ®· x¸c ®Þnh ®−îc sè l−îng lín th«ng tin cña cét
®Çu tiªn cña s¾p xÕp trong mét c©u lÖnh WHERE, thËm chÝ nÕu b¹n
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
74
kh«ng x¸c ®Þnh gi¸ trÞ ®èi víi c¸c cét kh¸c th× th«ng tin lÊy ®−îc vÉn
chÝnh x¸c .
VÝ dô :
Mysql> CREATE TABLE test(
Id int NOT NULL,
Last_name char(30)NOT NULL,
First_name char(30)NOT NULL,
PRIMARY KEY(id),
INDEX name(Last_name, First_name);
Khi ®ã tªn sÏ ®−îc chØ sè th«ng qua 2 cét Last_name, First_name.
ViÖc chØ sè sÏ ®−îc ¸p dông cho viÖc truy vÊn ®Õn c¸c gi¸ trÞ cô thÓ ®ã
trong ph¹m vi cña cét last_name hoÆc c¶ Last_name vµ First_name.
Do ®ã, cét tªn sÏ ®−îc dïng trong truy vÊn d−íi ®©y:
Mysql>SELECT* FROM test WHERE
last_name=”Lan”;
Mysql>SELECT* FROM test WHERE last_name=”Lan”
AND first_name=”NguyÔn”;
Mysql>SELECT* FROM test WHERE last_name=”Lan”
AND(first_name=”NguyÔn”)OR(first_name=”Lª”)
Mysql>SELECT* FROM test WHERE last_name=”Lan”;
AND(first_name>=”L”)AND(first_name<=”M”)
Tuy nhiªn cét tªn sÏ kh«ng ®−îc dïng trong truy vÊn d−íi ®©y :
Mysql>SELECT* from test WHERE last_name=”Lan”
Mysql>SELECT* from test WHERE last_name=”Lan”
OR(first_name=”NguyÔn”)
Sö dông c¸c kiÓu cét tõ nh÷ng bé m¸y CSDL kh¸c
§©y lµ c¸ch t¹o ra mét c¸ch dÔ dµng cã sö dông m· SQL cho
c¸c hÖ qu¶n trÞ CSDL kh¸c cã c¬ së lµ SQL.§©y chÝnh lµ ¸nh x¹ kiÓu
tõ CSDL kh¸c sang kiÓu t−¬ng øng bªn MySQL,do ®ã dÔ dµng
chuyÓn b¶ng tõ CSDL kh¸c sang b¶ng cã kiÓu trong MySQL .
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
75
KiÓu ë c¸c thµnh phÇn kh¸c KiÓu trong mySQL
Binary(num) Char(num)binary
Char varyfing(num) Varchar(num)
Float4 Float
Float8 double
Int1 Tinyint
Int2 Smallint
Int3 Mediumint
Int4 Int
Int8 Bigint
Long Varbinaryint mediumBlob
Long Varchar mediumText
Midleint Mediumint
Varbinary Varchar(num)Bynary
NÕu b¹n t¹o b¶ng víi kiÓu sö dông lµ cña bé m¸y CSDL kh¸c th× khi
®−a ra lÖnh :DISCRIBE tbl_name,khi ®ã Mysql sÏ ghi l¹i cÊu tróc
b¶ng nµy víi kiÓu t−¬ng øng trong Mysql.
5.C¸c kiÓu b¶ng trong MySQL
Trong Mysql cã 4 kiÓu b¶ng kh¸c nhau ,cã thÓ t¹o nhiÒu kiÓu b¶ng víi
c©u lÖnh
CREATE TABLE:
KiÓu b¶ng MyISAM(indexsequential acces method):§©y lµ kiÓu
b¶ng mÆc ®Þnh ®−îc t¹o ra khi b¹n dïng lÖnh Create,nã lµ c¬ së trong
m· lÖnh ISAM vµ cã mét s« sù më réng h÷u dông t¹o ra file víi phÇn
më réng .MYI
KiÓu b¶ng MyHeap:C¸c b¶ng kiÓu nµy ®−îc l−u tr÷ trong bé
nhí ,viÖc chØ sè ho¸ cña chóng ®−îc thùc hiÖn bëi hµm b¨m,v× vËy mµ
tèc ®é thùc hiÖn cña b¶ng kiÓu nµy cùc k× nhanh,nh−ng nã ph¶I tr¶ gi¸
rÊt ®¾t ,v× d÷ liÖu cña ta bÞ mÊt .V× vËy b¶ng nµy chØ dïng t¹m thêi
,b¹n cã thÓ chØ ra s« hµng tèi ®a trong c©u lÖnh Create table .KiÓu
b¶ng nµy cã thÓ chiÕm gÇn hÕt bé nhí cña b¹n ,v× vËy kh«ng thÓ sö
dông c¸c cét kiÓu blob,text hoÆc auto_increment.
B¶ng kiÓu BDB:C¸c b¶ng kiªu nµy lµ nh÷ng giao dÞch an toµn
,chóng ®−îc cung cÊp c¸c lÖnh COMMIT,ROOLBACK,c¸c b¶ng kiÓu
nµy ho¹t ®éng chËm h¬n c¸c b¶ng cã kiÓu MyISAM
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
76
B¶ng kiÓu Merge:§©y lµ kiÓu b¶ng míi ,m· lÖnh cho kiÓu b¶ng
nµy míi ®ang ë phiªn b¶n bªta,tuy nhiªn nã sÏ nhanh chãng æn ®Þnh
,®©y chÝnh lµ b¶ng ISAM nh−ng chóng chØ ®−îc chän lùa mét b¶ng
,chØ ®−îc insert,update,delete mét b¶ng mµ b¹n chän ,nÕu b¹n muèn
xo¸ b¶ng chØ cÇn chØ ®Þnh xo¸ merge.B¶ng kiÓu nµy gióp xö lý c¸c vÊn
®Ò sau ,dÔ qu¶n lý vµ t¸ch ra thµnh nhiÒu b¶ng kh¸c nhau ,n©ng cao
tèc ®é xö lý ,viÖc t×m kiÕm sÏ hiÖu qu¶ h¬n.
II. C¸c hµm trong MySQL
Hµm dïng trong c©u lÖnh SELECT vµ WHERE
1. Hµm nhãm.
Mysql>select 12*3
->7
Mysql>select (12)*3
->9
2. C¸c phÐp to¸n xö lý th«ng th−êng
Céng : Mysql>select 35
->8
Trõ : Mysql>select 3-5
->-2
Nh©n: Mysql>select 3*5
->15
Chia:Mysql>select 3/5
->0.6
Mysql>select 3/0
->NULL
3. PhÐp to¸n thao t¸c víi bit
Sè bit tèi ®a lµ 64 bits
PhÐp AND
Mysql>select 29&15;
->13
PhÐp OR:
Mysql>select 2915;
->31
DÞch tr¸I:
Mysql>select 1<<2;
->4
DÞch ph¶i:
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
77
Mysql>select 4>>2;
->1
4. PhÐp to¸n l«gic
C¸c phÐp and(&),or(::),not(!).C¸c gi¸ trÞ tr¶ vÒ lµ 0 hoÆc 1 t−¬ng øng
®óng hoÆc sai
VÝ dô: Mysql>select not 1;
->0
5. C¸c phÐp so s¸nh(>=,>,<=,<)
MySQL thùc hiÖn phÐp so s¸nh theo quy t¾c sau:
-NÕu mét trong hai ®èi sè lµ NULL th× kÕt qu¶ so s¸nh lµ NULL,trõ
phÐp t−¬ng ®−¬ng .
-NÕu c¶ hai ®èi sè lµ kiÓu x©u th× ®−îc so s¸nh nh− gi÷a c¸c x©u víi
nhau .
-NÕu c¶ hai ®Òu lµ sè nguyªn th× ®−îc so s¸nh nh− c¸c sè nguyªn.
-Gi¸ trÞ hexa ®−îc xem nh− lµ x©u nhÞ ph©n nÕu kh«ng so s¸nh víi sè
kh¸c .
-NÕu mét trong nh÷ng ®èi sè lµ kiÓu TIMESTAMP hoÆc DATETIME
cßn ®èi sè kia lµ mét h»ng sè th× h»ng sè ®ã sÏ ph¶I ®−îc chuyÓn sang
kiÓu TIMESTAMP tr−íc khi so s¸nh.§ã chÝnh lµ lµm cho viÖc sö dông
ODBC th©n thiÖn h¬n.
-Trong tÊt c¶ c¸c tr−êng hîp kh¸c th× ®èi sè ®−îc xem nh− lµ sè thùc.
VÝ dô:
Mysql>SELECT 1>’6x’;
->0
Mysql>SELECT 7>’6x’;
->1
Mysql>SELECT 1=’x6’;
->1
Mysql>SELECT 1 is NULL,0 IS NULL,NULL IS NULL
->0 0 1
phÐp to¸n BETWEEN:
expr BETWEEN min AND max
Mysql>select 1BETWEEN 2 AND 3;
->0
Mysql>select ‘b’BETWEEN ‘a’ AND ‘c’;
->1
Mysql>select 2BETWEEN 2 AND ‘x-3’;
->0
PhÐp to¸n in,not in(value1,…)
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
78
mysql>select 2 IN (0,4,’dfdg’);
->0
mysql>select ‘dfdg’ IN (0,4,’dfdg’);
->1
PhÐp to¸n ISNULL
mysql>select ISNULL(11);
->0
mysql>select ISNULL(1/0);
->1
6. C¸c hµm so s¸nh x©u
§èi víi c¸c hµm so s¸nh x©u th× cã ph©n biÖt ch÷ hoa ,ch÷ th−êng
expr LIKE pat[ESCAPE ‘escape-char’]
gi¸ trÞ tr¶ vÒ cã thÓ lµ sè hoÆc x©u,víi hµm nµy cã thÓ dïng hai kÝ tù
®¹i diÖn lµ %,-
%: gi¸ trÞ tr¶ vÒ cã thÓ lµ sè c¸c kÝ tù
-: gi¸ trÞ phï hîp chØ lµ mét kÝ tù
T−¬ng tù ta sÏ cã hµm NOT LIKE: NOT (expr LIKE pat[ESCAPE
‘escape-char’])
VÝ dô : mysql>select ‘hµ’ LIKE ‘hµ-’;
->1
mysql>select 10 LIKE ‘1%’;
->1
Hµm STRCMP(expr1,expr2):tr¶ vÒ 0 nÕu 2 x©u nh− nhau ,-1 nÕu ®èi
sè ®Çu nhá h¬n ®èi sè hai theo thø tù s¾p xÕp ,ngoµI ra th× b»ng 1
mysql>select STRCMP (‘text1’,’text2’);
->-1
mysql>select STRCMP (‘text1’,’text’);
->1
mysql>select STRCMP (‘text1’,’text1’);
->0
PhÐp to¸n cast
mysql>select “a”=”A”;
->1
mysql>select BINARY “a”=”A”;
->0
Hµm IF(expr1,expr2,expr3)
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
79
T−¬ng ®−¬ng víi hµm if kÐp trong ng«n ng÷ C,nÕu expr1 ®óng
th× hµm nhËn gi¸ trÞ expr2,ng−îc l¹i th× nhËn gi¸ trÞ
expr3
VÝ dô:
Mysql>select IF(1<2,4,5);
->4
Mysql>select IF(1>2,yes,no);
->no
gi¸ trÞ tr¶ vÒ cã thÓ lµ kiÓu s« hoÆc x©u tuú theo ng÷ c¶nh phï hîp .
7. C¸c hµm to¸n häc.
-ABS(x): gi¸ trÞ tuyÖt ®èi cña x
mysql>select ABS(-3);
->3
mysql>select ABS(3);
->3
-SIGN(X): DÊu cña biÓu thøc trong ngoÆc ,tr¶ l¹i 0 nÕu X=0,-1 nÕu
X<0;1 nÕu X>0
mysql>select (3-5);
->-1
mysql>select (0);
->0
mysql>select (3);
->1
-MOD(N,M):lÊy ph©n d− cña phÐp chia n cho m
mysql>select MOD(30,6);
->0
mysql>select 13%6;
->1
-ROUND(X):LÊy phÇn nguyªn gÇn X nhÊt
-exp(x),log(x),log10(x)
-POW(x,y):x mò y
T−¬ng tù ta cã c¸c hµm to¸n häc kh¸c nh−:
sin(x),cos(x),tan(x),asin(x),acos(x),atan(x),rand();
8. C¸c hµm xö lý x©u:
-Char(N,…) hµm tr¶ vÒ d·y c¸c kÝ tù cã m· ACCSI ®−îc liÖt kª trong
ngoÆc
VD: mysql>select CHAR(77,121,83,81,’76’);
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
80
->’MySQL’
mysql> select CHAR(77,77.3,’77.3’);
->’MMM’
-Hµm ghÐp 2 x©u :
CONCAT(str1,str2,…)
vd : mysql> select CONCAT(‘MY’,’S’,’QL’);
->’MYSQL’
mysql> select CONCAT(‘MY’,NULL,’QL’);
->NULL
mysql> select CONCAT(12.5);
->12.5
-CONCAT_WS(separator,str1,str2..)
mysql> select CONCAT_WS(“,”,”first name”,”last name”);
->’first name,last name’
mysql> select CONCAT_WS(“,”,”first name”,NULL,”last
name”);
->’first name,last name’
-C¸c hµm vÒ ®é dµI cña x©u :
LENGTH(str)
0CTET_LENGTH(str)
CHAR_LENGTH(str)
CHARACTER_LENGTH(str)
Mysql>select LENGTH(‘text’);
->4
mysql>select 0CTET_LENGTH(‘text’)
-C¸c hµm ®Þnh vÞ x©u con
LOCATE(substr,str)
POSITION(substr IN str)
Mysql>select LOCATE(‘nam’,’ph−¬ngnam’);
->7
Mysql>select LOCATE(‘nama’,’ph−¬ngnam’);
->0
NgoµI ra trong Mysql cßn rÊt nhiÒu c¸c hµm liªn quan ®Õn viÖc
xö lý x©u kh¸c nh−ng kh«ng liÖt kª ë ®©y .Ta sÏ sang ch−¬ng
míi
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
81
CH¦¥NG III. C¸C LÖNH THAO T¸C VíI CSDL
I. C¸c lÖnh thao t¸c víi CSDL
1. LÖnh t¹o CSDL
Có ph¸p :CREATE DATABASE[if not exists] db_name;
T¹o ra CSDL nh− lµ t¹o mét th− môc mµ trong ®ã cã c¸c file,®©y chØ
lµ t¹o th− môc chø ch−a cã file,mµ c¸c file ë ®©y lµ c¸c b¶ng.VËy ta sÏ ph¶i
cã c©u lÖnh t¹o b¶ng
CREATE DATABASE IF NOT EXISTS NHANSU;
C©u lÖnh trªn sÏ t¹o ra mét CSDL tªn NHANSU,nh−ng ch−a cã b¶n
nµo ®−îc t¹o ra.
Tõ kho¸ if not exists nÕu ®−îc chØ ra sÏ tr¸nh ®−îc mét lçi ph¸t sinh nÕu nh−
trªn m¸y ®· cã c¬ së d÷ liÖu nµy råi.
2. LÖnh xo¸ CSDL.
Có ph¸p:Drop Database [if esists]db_name.
C©u lÖnh nµy sÏ xo¸ tÊt c¶ c¸c b¶ng trong c¬ së d÷ liÖu vµ xo¸ lu«n c¶ c¬ së
d÷ liÖu cã tªn lµ DB_NAME.
VÝ dô:Drop Database [if eists] NHANSU
NÕu b¹n thùc hiÖn xo¸ mét c¬ së d÷ liÖu víi kÕt nèi c¬ së d÷ liÖu ®ã th× c¶
CSDL nguån vµ kÕt nèi sÏ bÞ xo¸.B¹n ph¶I rÊt cÈn thËn ®èi víi lÖnh nµy,nã
sÏ xo¸ th− môc víi tªn cña CSDL vµ tÊt c¶ c¸c file víi c¸c phÇn më réng nh−
sau:
.BAK .DAT .HSH .ISD
.ISM .ISM .MRG .MYD
.MYI .DR .FRM
Trong c¸c phiªn b¶n 3.22 hoÆc cò h¬n ta cã thÓ chØ ®Þnh tõ kho¸ if
esists ®Ó ng¨n mét lçi xuÊt hiÖn nÕu nh− CSDL ch−a cã trªn ®Üa.
II. C¸c lÖnh thao t¸c trªn b¶ng vµ xö lý ®èi víi b¶ng.
1. LÖnh t¹o b¶ng.
Có ph¸p:
CREAT{TEMPORARY}TABLE{IF NOT ESISTS}
Tbl_name [(creat_definition,…)]
[table_options] [select_statement]
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
82
LÖnh sÏ t¹o ra mét b¶ng trong c¬ së d÷ liÖu hiÖn t¹i nÕu c¬ së d÷ liÖu
ch−a tån t¹i th× sÏ cã lçi ph¸t sinh.Trong phiªn b¶n Mysql3.2.2 hoÆc
muén h¬n tªn b¶ng cã thÓ ®−îc chØ ®Þnh râ lµ db_name.table_name
trong tr−êng hîp nµy m¸y sÏ thùc hiÖn mµ kh«ng quan t©m tíi viÖc c¬
së d÷ liÖu cã tån t¹i hay kh«ng.
Trong ®ã:
Tbl_name lµ tªn b¶ng cÇn t¹o
table_options :chØ ra kiÓu cña b¶ng cÇn t¹o vµ nh÷ng ®Æc tÝnh cña b¶ng
cÇn t¹o
table_options ={ISAM | MYISAM | HEAP | MERGE}
or AUTO_INCREMENT=#:Gi¸ trÞ tiÕp theo mµ b¹n muèn ®Æt cho
b¶ng
or AUTO_ROW_LENGTH=#:Gi¸ trÞ trung b×nh ®é dµI cña hµng
trong b¶ng
or COMMENT=”string”:lêi b×nh luËn tèi ®a 60 kÝ tù
or MAX_ROWS=# sè hµng tèi ®a mµ b¹n ®Þnh l−u tr÷
creat_definition:®−îc ®Þnh nghÜa nh− sau:
creat_definition:
col_name type [NOT NULL | NULL] [DEFAULT
default_value]
{ AUTO_INCREMENT}
[PRIMARY KEY}{reference_definition]
or PRIMARY KEY (index_col_name,…)
or KEY [index_name] (index_col_name,…)
or INDEX [index_name] (index_col_name,…)
or UNIQUE {INDEX} [index_name] (index_col_name,…)
or FULLTEXT {INDEX} [index_name] (index_col_name,…)
or {CONSTRANINT symbol] FOREIGN KEY index_name
((index_col_name,…)
[reference_defintion]
or CHECK (expr)
type:KiÓu cña cét ®−îc t¹o trong b¶ng
REFERENCES tab_name [(index_col_name,…)]
[MATCHFULL | MATCHPARTIAL]
[ON DELETE reference_option ]
[ON UPDATE reference_option]
reference_option:
RESTRICT | CASCADE | SET NULL | NO ACTION | SET
DEFAULT
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
83
Trong phiªn b¶n 3.23 b¹n cã thÓ sö dông tõ kho¸ temporary khi
t¹o mét b¶ng,b¶ng t¹m nµy sÏ tù ®éng ®−îc xo¸ khi kÕt thóc mét
phiªn lµm viÖc .
NOT NULL: NÕu cét ®−îc chØ ®Þnh lµ NOT NULL th× khi nhËp liÖu ta
b¾t buéc ph¶I nhËp d÷ liÖu cho cét nµy .
NULL :§èi víi cét kiÓu timestamp sÏ cã sù kh¸c biÖt vÒ gi¸ trÞ NULL
so víi nh÷ng cét cã nh÷ng kiÓu kh¸c,b¹n kh«ng thÓ ®−a ra gi¸ trÞ
NULL víi cét cã kiÓu timestamp nÕu ®Æt lµ NULL th× nã sÏ tù ®éng
®Æt ngµy giê hiÖn t¹i,bëi v× cét cã kiÓu stamp sö dông c¸ch thøc nµy
nªn thuéc tÝnh NULL hoÆc NOT NULL sÏ kh«ng ®−îc ®Æt nh− nh÷ng
cét th«ng th−êng vµ nã sÏ ®−îc lê ®I nÕu b¹n chØ ®Þnh ®IÒu nµy .
DEFAULT<gi¸ trÞ ngÇm ®Þnh >:cét nµy sÏ tù ®éng ®−îc ®Æt lµ gi¸ trÞ
ngÇm ®Þnh nÕu nh− ta bá qua kh«ng nhËp gi¸v trÞ cho cét nµy .Gi¸ trÞ
ngÇm ®Þnh ph¶I lµ h»ng sè theo nghÜa lµ ta kh«ng thÓ ®Æt gi¸ trÞ mÆc
®Þnh cho cét lµ gi¸ trÞ tr¶ vÒ cña mét hµm ,nÕu cét ®−îc khai b¸o lµ
NOT NULL th× gi¸ trÞ ngÇm ®Þnh sÏ phô thuéc kiÓu cña cét
NÕu kh«ng ®Æt DEFAULT
-AUTO_INCREMENT:chØ cã ®èi víi cét sè nguyªn cét nµy sÏ tù
®éng ®−îc t¨ng khi nhËp d÷ liÖu .NÕu b¹n xo¸ mét hµng chøa gi¸ trÞ
lín nhÊt cña cét auto_increment th× gi¸ trÞ nµy sÏ dïng l¹i cho lÇn
nhËp liÖu sau (®IÒu nµy chØ x¶y ra ®èi víi b¶ng lo¹i ISAM mµ kh«ng
x¶y ®èi víi b¶ng MYISAM)
chó ý:Mçi hµng chØ cã mét cét ®Æt lµ auto_increment vµ ph¶I ®−îc ®Æt
lµ chØ sè
-UNIQUE KEY:®©y lµ kho¸ cña b¶ng nã chØ cã thÓ nhËn mét gi¸ trÞ
nhÊt ®Þnh,sÏ cã lçi nÕu nh− ta chÌn vµo mét hµng cña b¶ng gi¸ trÞ kho¸
trïng víi kho¸ cña hµng ®· tån t¹i .
-PRIMARY KEY:§Þnh nghÜa kho¸ chÝnh cña b¶ng,lµ kho¸ duy nhÊt
víi rµng buéc r»ng tÊt c¶ c¸c gi¸ trÞ kho¸ ®Òu ph¶I ®Æt NOT NULL
mçi b¶ng chØ cã thÓ cã mét kho¸ chÝnh.
-FOREIGN KEY :kho¸ ngo¹i dïng lµm kho¸ chÝnh cña b¶ng kh¸c
-MÖnh ®Ò SELECT :NÕu cã thªm mÖnh ®Ò SELECT sau c©u lÖnh
CREATE TABLE th× Mysql sÏ t¹o c¸c tr−êng míi cho tÊt c¶ c¸c thµnh
phÇn n»m trong c©u lÖnh SELECT
VÝ dô ta t¹o b¶ng hosinh
CREATE TABLE HOCSINH(,
Mahs char(5) NOT NULL,PRIMARY KEY,
Hoten varchar(35),
Ngaysinh date,
Quequan varchar(40));
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
84
B©y giê ta t¹o b¶ng SINHVIEN gåm cã mét tr−êng masv vµ c¸c
tr−êng hoten,quequan,ngaysinh lÊy tõ b¶ng HOCSINH:
CREATE TABLE SINHVIEN(,
Masv char(5) NOT NULL PRIMARY KEY,
SELECT hoten,ngaysinh,quequan from HOCSINH);
Mçi b¶ng tbl_name sÏ ®−îc thay bëi mét sè file trong th− môc c¬ së
d÷ liÖu ,nÕu kiÓu b¶ng lµ MYISAM b¹n sÏ thu ®−îc c¸c file sau khi
thùc hiÖn lÖnh t¹o b¶ng
Tªn file Chøc n¨ng
Tbl_name.frm file ®Þnh d¹ng b¶ng
Tbl_name.Myd file chøa d÷ liÖu
Tbl_name.MyI file chØ sè
2. LÖnh söa cÊu tróc b¶ng
Có ph¸p :ALTER[IGNORE] TABLE tbl_name
alter_spec[,alter_spec...] alter_specification :
ADD[COLUMN] create_definition[FIRST |AFTER colum_name]
Or ADD[COLUMN] (create_definition, create_definition,..)
Or ADD INDEX[index_name] (index_col_name,..)
Or ADD PRIMARY KEY(index_col_name,..)
Or ADD UNIQUE[index_name](index_col_name,..)
Or ADD FULLTEXT[index_name](index_col_name,..)
OR ADD[CONSTRAIN symbol] FOREIGN KEY index_name
(index_col_name)
[referent_definition]
or ALTER[COLUM] col_name{SET DEFAULT literal |DROP
DEFAULT}
OR CHANGE[COLUM] old_col_name create_definition
Or MODIFY[COLUMN] create_definition
OR DROP[COLUMN] column_name
OR DROP PRIMARY KEY
OR DROP INDEX index_name
Or RENAME[TO] new_tbl_name
Or table_options
LÖnh ALTER TABLE cho phÐp b¹n söa cÊu tróc cña mét b¶ng ®·
cã,vÝ dô b¹n cã thÓ thªm hoÆc xo¸ cét,t¹o hoÆc huû chØ sè,thay ®æi
kiÓu cña cét ®· cã ,hoÆc ®æi tªn cét hoÆc ®æi tªn b¶ng ,b¹n cã thÓ thay
®æi lêi chó thÝch cho b¶ng hoÆc kiÓu cña b¶ng .
NÕu sö dông lÖnh ALTER TABLE ®Ó thay ®æi mét cét ®· ®−îc
chØ ®Þnh râ nh−ng DESCRIPE tbl_name chØ ra r»ng cét kh«ng thÓ thay
®æi ,cã nghÜa lµ Mysql bá qua sù thay ®æi nµy do mét lý do nµo ®ã .VÝ
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
85
dô nÕu b¹n cè thay ®æi mét cét cã kiÓu varchar sang cét kiÓu char th×
Mysql sÏ kh«ng thùc hiÖn viÖc thay ®æi nÕu trong b¶ng cã c¸c cét cã
®é dµi thay ®æi .
LÖnh ALTER TABLE thùc hiÖn viÖc t¹o mét b¶n sao t¹m thêi cña
b¶ng nguån viÖc söa ®æi thùc hiÖn trªn b¶ng sao nµy ,b¶ng nguån sÏ
®−îc xo¸ khi b¶ng míi ®−îc ®æi tªn v× ho¹t ®éng theo c¸ch nµy nªn
viÖc cËp nhËt sÏ ®−îc thùc hiÖn mét c¸ch tù ®éng mét lÇn n÷a tíi
b¶ng míi
§Ó sö dông lÖnh ALTER TABLE b¹n cÇn ph¶i cã quyÒn
:select,insert,update,create,drop ®èi víi b¶ng.
-Mét sè vÝ dô dïng lÖnh ALTER TABLE :
§Ó söa ®æi tªn mét cét :
ALTER TABLE hocsinh CHANGE hokhautt,hokhautt varchar
(40);
NÕu b¹n muèn thay ®æi kiÓu cña cét mµ kh«ng muèn ®æi tªn th× b¹n
vÉn ph¶i viÕt tªn cña cét 2 lÇn .
ALTER TABLE hocsinh CHANGE hokhautt,hokhautt CHAR
(40);
Ta còng cã thÓ dïng MODIFY ®Ó thay ®æi kiÓu cña cét
ALTER TABLE hocsinh modify ngaysinh char(10);
NÕu sö dông lÖnh CHANGE hoÆc modify víi mét cét ®· s¾p xÕp mµ
file chØ sè ®· tån t¹i th× b¹n kh«ng thÓ s¾p xÕp nhiÒu h¬n sè kÝ tù ®·
®−îc chØ sè ho¸ .
Khi dïng change hoÆc modify Mysql sÏ cè g¾ng chuyÓn d÷ liÖu sang
kiÓu míi mét c¸ch tèt nhÊt .
-drop index :huû file chØ sè nÕu cét ®−îc s¾p xÕp l«gic (chØ sè ) mµ ta
xo¸ nã th× nã còng ®−îc xo¸ ë thµnh phÇn chØ sè nµy còng sÏ ®−îc xo¸
Drop primary key xo¸ kho¸ chÝnh
-ORDER BY:cho phÐp t¹o mét b¶ng míi víi hµng ®−îc chØ ra ë mÖnh
®Ò order by ,chó ý r»ng b¶ng sÏ kh«ng cßn nh− cò trong mÖnh ®Ò
order sau khi chÌn vµ xo¸
§æi tªn b¶ng : ALTER TABLE old_name rename new_name;
®Ó chuyÓn mét cét tõ kiÓu integer sang tinyint not null(víi cïng
tªn ) vµ ®æi cét cã tªn lµ hoten char(10)->char(20) vµ ®æi tõ hoten-
>hovaten
ALTER TABLE sinhvien modify masv tinyint not null ,change hoten
hovaten char(20);
Bæ sung thªm tr−êng ngaysinh
ALTER TABLE sinhvien add ngaysinh timestamp ;
®Ó chuyÓn cét thµnh kho¸ chÝnh
ALTER TABLE sinhvien add primary key(masv);
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
86
3. LÖnh ®æi tªn b¶ng
Có ph¸p :Rename table tbl_name |to newtbl_name |,tbl_name2
to newtablename,…]
ViÖc ®æi tªn thùc hiÖn mét c¸ch tù ®éng cã nghÜa lµ trong khi thùc
hiÖn ®æi tªn sÏ kh«ng thÓ truy nhËp vµo b¶ng nµy .
ViÖc ®æi tªn thùc hiÖn tõ tr¸i qua ph¶i ,v× vËy nÕu b¹n muèn chuyÓn
®æi gi÷a c¸c b¶ng b¹n sÏ thùc hiÖn nh− sau :
RENAME TABLE old_table to backup_table,
New_table to old_table,
Backup_table to new_table;
B¹n cã thÓ ®æi tªn b¶ng gi÷a 2 CSDL kh¸c nhau :
RENAME TABLE curent_database.table_name to
otherdatabasse.table_name
Khi b¹n thùc hiÖn c©u lÖnh rename b¹n kh«ng thÓ thùc hiÖn viÖc kho¸
b¶ng hoÆc thùc hiÖn mét giao dÞch.
4. LÖnh xãa b¶ng:
Có ph¸p :Drop table [if esists ] tbl_name1
[,tbl_nme2,...] [restrict/cascade]
LÖnh nµy cã thÓ xo¸ mét b¶ng hoÆc nhiÒu b¶ng,tÊt c¶ d÷ liÖu trong
b¶ng sÏ bÞ xo¸.LÖnh Drop table kh«ng ph¶ilµ mét giao diÖn an toµn.
5. LÖnh tèi −u b¶ng.
Có ph¸p:
Optimize table tbl_name [,tbl_name,…]
LÖnh nµy nªn dïngkhi b¹n xo¸ phÇn lín d÷ liÖu cña b¶ng hoÆc b¹n
thùc hiÖn nhiÒu sù thay ®æi ®Õn b¶ng nh− thay ®æi ®é dµI cña c¸c
hµng(§èi víi b¶ng cã kiÒu varchar,bolb),hoÆc xo¸ b¶n ghi ®· ®−îc
duy tr× trong mét danh s¸ch liªn kÕt vµ c©u lÖnh insert sau ®ã dïng l¹i
vÞ trÝ cña b¶n ghi võa xo¸.
LÖnh nµy chØ thùc hiÖn víi b¶ng kiÓu MYISAM vµ BOB.
6. LÖnh Check table (KiÓu tra b¶ng)
Có ph¸p:
Check table tbl_name [tbl_name,…][option…];
Option=Quick/fast/medium/extend/changed
C©u lÖnh trªn chØ thùc hiÖn ®èi víi b¶ng MYISAM nÕu kh«ng chØ ®Þnh
option nã sÏ mÆc ®Þnh lµ medium.C©u lÖnh thùc hiÖn viÖc kiÓm tra lçi
cña b¶ng.
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
87
7. LÖnh t¹o b¶ng sao l−u(dù tr÷)
Có ph¸p:Backup table tbl_name [,tbl_name…] to
‘path/to/backup/directory’;
Nã sÏ thùc hiÖn viÖc sao chÐp toµn bé c¸c file cña b¶ng tíi th− môc
l−u tr÷,kÝch th−íc l−u tr÷ lµ nhá nhÊt.
8. LÖnh phôc håi b¶ng ®· Backup.
Có ph¸p:Restore table tbl_name,…]
From’/path/to/backup/directory’
Phôc håi mét b¶ng ®· ®−îc sao l−u chØ thùc hiÖn ®èi víi b¶ng ®· ®−îc
backup b¶ng ®· tån t¹i sÏ kh«ng bÞ ghi ®Ì, b¹n sÏ gÆp khã lçi nÕu cã
phôc håi mét b¶ng ®· tån t¹i.
9. LÖnh ph©n tÝch b¶ng.
Có ph¸p:analiyze table tbl_name [,tbl_name …]
Ph©n tÝch vµ l−u thuéc tÝnh kho¸ cho b¶ng trong khi ph©n tÝch b¶ng sÏ
bÞ khãa víi kho¸ read lÖnh trªn chØ thùc hiÖn ®èi víi b¶ng
MYISAM,BOB.MYSQL sö dông viÖc sao l−u c¸c thuéc tÝnh kho¸ ®Ó
quyÕt ®Þnh tr×nh tù viÖc kÕt nèi gi÷a c¸c b¶ng khi thùc hiÖn viÖc kÕt
nèi víi mét rµng buéc nµo ®ã.
10. LÖnh repair table.
Có ph¸p:REPAIR TABLE tbl_name1 [,tbl_name2,…]
[Quick] [extended]
LÖnh trªn chØ thùc hiÖn ®èi víi b¶ng MYISAM,c©u lÖnh nµy t−¬ng tù
®èi víi viÖc ch¹y myisamchk_ r table_name;
LÖnh thùc hiÖn söa ch÷a b¶ng bÞ háng.
11. LÖnh Delete.
Delete [low_priority] from tbl_name
[where <§IÒu kiÖn>]
[limit rows] //giíi h¹n sè hµng cÇn xo¸.
Thùc hiÖn viÖc xo¸ c¸c b¶n ghi tõ tbl_name mµ nã tho¶ m·n ®IÒu kiÖn
rµng buéc cña mÖnh ®Ò where vµ tr¶ l¹i sè hµng bÞ xo¸.
NÕu kh«ng cã mÖnh ®Ò where th× tÊt c¶ c¸c hµng sÏ bÞ xo¸ nÕu muèn
biÕt sè b¶n ghi bÞ xo¸ b¹n sÏ thùc hiÖn theo lÖnh sau:DELETE FROM
tbl_name WHERE1>0;
12. LÖnh Truncate.
Có ph¸p: Truncate table tbl_name ;
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
88
C©u lÖnh trªn t−¬ng tù nh− lÖnh delete from tbl_name;
Nh−ng nã còng cã mét sè kh¸c biÖt:
-Nã sÏ xo¸ b¶ng vµ t¹o l¹i b¶ng míi víi cÊu tróc cña b¶ng bÞ
xo¸,v× vËy nã sÏ thùc hiÖn nhanh h¬n lµ xo¸ nhiÒu hµng.
-Nã kh«ng ph¶I lµ mét giao dÞch an toµn:nã sÏ tù ®éng kÕt thóc
giao dÞch hiÖn thêi nÕu lÖnh commit ®−îc gäi.
-Kh«ng tr¶ l¹i sè dßng ®· bÞ xo¸.
13. LÖnh Select.
Có ph¸p:
SELECT{STRAIGHT_JOIN}{SQL_SMALL_RESULT}
{SQL_BIG_RESULT}
{SQL_BUFFER_RESULT}
{HIGH_PRIORITY}
{DISTINCT | DISTINCTROW |ALL}
Select_expression,...
[INTO {OUTFILE | DUMPFILE}’file_name’export_options]
[FROM table_references
[WHERE where_definition]
[GROUP BY {unsigned_integer |col_name | formula}]
[HAVING where_definition ]
[ORDER BY {unsigned_integer |col_name | formula}[ASC
|DESC],..]
[LIMIT{ofset,}rows]
[PROCEDURE procedure_name]]
§©y lµ lÖnh dïng ®Ó lÊy d÷ liÖu tõ c¸c hµng cña mét hoÆc nhiÒu b¶ng
d÷ liÖu.§©y lµ c©u lÖnh thao t¸c chÝnh cña ng«n ng÷ SQL
Mét sè vÝ dô vÒ c©u lÖnh MySql
CREATE TABLE persons(
Id SMALLINT UNSIGNED NOT NULL
AUTO_INCREMENT,
Name char(60) NOT NULL,
PRIMARY KEY (id));
CREATE TABLE shirts(
Id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
Style ENUM(‘t_shirt’,’polo’,’dress’) NOT NULL,
Color ENUM (‘red’,’blue’,’orange’,’white’,’black’) NOT NULL,
Owner SMALLINT UNSIGNED NOT NULL REFERENCES persons,
PRIMARY KEY (id));
INSERT INTO persons VALUES (NULL,’antonio Paz’);
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
89
INSERT INTO shirts VALUES
(NULL,’polo’,’blue’,LAST_INSERT_ID()),
(NULL,’dress’,’white’LAST_INSERT_ID()),
(NULL,’t_shirt,’blue’LAST_INSERT_ID());
INSERT INTO persons VALUES(NULL,’Lilliana Angelovska’);
INSERT INTO shirts VALUES
(NULL,’dress’,’orange’,LAST_INSERT_ID()),
(NULL,’polo’,’red’LAST_INSERT_ID()),
(NULL,’dress,’blue’LAST_INSERT_ID());
(NULL,’t_shirt,’white’,LAST_INSERT_ID());
SELECT * FROM persons;
Id Name
1
2
Antonio Paz
Lilliana Angelovska
SELECT * FROM shirt;
id style color Owner
1
2
3
4
5
6
7
Polo
Dress
T_shirt
Dress
Polo
Dress
T_shirt
Blue
White
Blue
Orange
Red
Blue
white
1
1
1
2
2
2
2
SELECT s.* from persons p,shirts s
WHERE p.name LIKE ‘LILIANA%’
AND s.owner=p.id
AND s.color<>’white’;
Id style color Owner
4
5
6
Dress
Polo
dress
Orange
Red
blue
2
2
2
14. C¸c c©u lÖnh cËp nhËt d÷ liÖu
a. ChÌn dßng míi vµo b¶ng
C©u lÖnh Insert :
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
90
INSERT [LOW_PRIORITY / DELAYED / IGNORE]
[INTO] tbl_name [(col_name,.. .)]
VALUES (gi¸ trÞ cét,.. .), (... ),.. .
ho¹c :
INSERT [LOW_PRIORITY / DELAYED / IGNORE]
[INTO] tbl_name [(col_name,.. .)]
SELECT.. .
ho¹c :
INSERT [LOW_PRIORITY / DELAYED / IGNORE]
[INTO] tbl_name
SET col_name_1=gi¸ trÞ cét 1, col_name_2=gi¸ trÞ cét 2,.. .
Trong ®ã :
+NÕu sö dông thµnh phÇn LOW_PRIORITY c©u lÖnh chØ cã thÓ insert
d÷ liÖu khi kh«ng cã ai ®äc d÷ liÖu tõ b¶ng nµy, vµ ng−êi sö dông ph¶i ®îi
khi c©u lÖnh kÕt thóc .
+NÕu sö dông thµnh phÇn DELAYED ngõi sö dông sÏ kh«ng ph¶i ®îi
cho tíi khi c©u lÑnh insert kÕt thóc mµ viÖc thªm dßng míi vÉn ®îi khi
kh«ng cã ai ®äc d÷ liÖu tõ b¶ng nµy. Thµnh phÇn nµy cßn cho phÐp thùc hiÖn
c©u lÖnh theo tõng khèi (thùc hiÖn nhiÒu c©u lÖnh insert cïng lóc).
+Thµnh phÇn IGNORE sÏ bá qua c¸c lçi khi thªm dßng míi vµo b¶ng.
Tr−êng hîp lçi th−êng xÈy ra khi trïng d÷ liÖu lµ kho¸, dßng míi sÏ kh«ng
®−îc thªm vµo b¶ng .
VÝ dô :
INSERT INTO author (id, fullname, email)
VALUES (‘j001’,‘John Writer’,‘jw@somewhere.nice.com’);
ho¹c :
INSERT INTO author SET
id=’j001’,fullname=’JohnWriter’,email=’jw@somewhere.nice.com’;
ho¹c :
INSERT INTO tempauthor (id, fullname, email)
SELECT id, fullname, email FROM author
WHERE id >= ‘100’ ;
b. C©u lÖnh Replace
Có ph¸p :
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
91
REPLACE [LOW_PRIORITY / DELAYED]
[INTO] tbl_name [(col_name,.. .)]
VALUES (gi¸_trÞ_cét,.. .)
ho¹c :
REPLACE [LOW_PRIORITY / DELAYED]
[INTO] tbl_name [(col_name,.. .)]
SELECT.. .
ho¹c :
REPLACE [LOW_PRIORITY / DELAYED]
[INTO] tbl_name
SET col_name1=gi¸_trÞ_cét1, col_name2=gi¸_trÞ_cét2,.. .
C©u lÖnh nµy kh«ng gièng víi c©u lÖnh INSERT , nã thùc hiÖn nh−
sau:
+Mét dßng (b¶ng ghi) míi ®−îc t¹o ra nÕu cét kho¸ kh«ng bÞ trïng
ho¹c b¶ng kh«ng cã cét khãa.
+NÕu trïng cét kho¸ toµn bé d÷ liÖu kh«ng ph¶i lµ kho¸ cã trong danh
s¸ch cét sÏ ®−îc thay b»ng gi¸ trÞ t−¬ng øng.
+NÕu toµn bé d÷ liÖu cÇn thay ®æi mµ bÞ trïng mét dßng (b¶ng ghi) th×
d÷ liÖu sÏ kh«ng ®−îc thªm vµo.
c. C©u lÖnh Update
C©u lÖnh thay thÕ mét hoÆc nhiÒu cét cña mét dßng (b¶ng ghi) tho¶ m·n
®iÒu kiÖn nµo ®ã .
Có ph¸p :
UPDATE [LOW_PRIORITY] tbl_name SET col_name1=gÝa_trÞ1,
col_name2,.. .
[WHERE biÓu_thøc_®iÒu_kiÖn] [LIMIT #]
+C©u lÖnh nµy lµm thay ®æi gi¸ trÞ cét cña mét dßng (b¶ng ghi) nÕu
tho¶ m·n ®iÒu kiÖn chØ ra trong mÖnh ®Ò WHERE.
+NÕu kh«ng cã mÖnh ®Ò WHERE toµn bé c¸c dßng sÏ bÞ thay ®æi .
+Chóng ta cã thÓ giíi h¹n dßng (b¶ng ghi) bÞ thay ®æi b»ng tuú chän
LIMIT.
VÝ dô :
UPDATE document SET title=’Table of contents’,
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
92
comment=’Fixed typo in the title’ WHERE id=321;
C©u lÖnh trªn cËp nhËt l¹i tr−êng title vµ comment trong b¶ng
document víi m· id = 321.
III. C¸c Thao t¸c tªn b¶ng
1. Lùa chän c¸c hµng
• B¹n cã thÓ chän c¸c hµng riªng biÖt tõ b¶ng cña m×nh.NÕu b¹n muèn
kiÓm tra l¹i sù thay ®æi mµ b¹n ®· thùc hiÖn víi ngµy sinh cña
browser ,chän b¶n ghi browser nh− sau :
Mysql>SELECT*FROM pet WHERE name=”browser”
• KÕt qu¶ x¸c nhËn r»ng n¨m ®−îc ghi ®óng b©y giê lµ n¨m 1989 mµ
kh«ng ph¶i lµ n¨m 1998
• C¸c x©u sö dông rÊt phong phó .Do ®ã b¹n cã thÓ sö dông tªn lµ
“browser” hay “BROWSER” thi kªt qu¶ kh«ng thay ®æi.
• B¹n cã thÓ ®Þnh râ giíi h¹n trªn bÊt kú cét nµo (kh¸c cét tªn) .VÝ dô
nÕu b¹n muèn biÕt cã nh÷ng loµi ®éng vËt nµo sinh sau n¨m 1998 ta
sÏ kiÓm tra cét ngµy sinh:
Mysql>SELECT * FROM pet WHERE both>=”1998-1-1”;
• B¹n cã thÓ kÕt hîp c¸c ®k ®Ó x¸c ®Þnh nh÷ng con chã c¸i
Mysql> SELECT * FROM pet WHERE species=”dog” AND
sex=”f”;
Ta co thÓ dïng c¸c to¸n tö “AND” hoÆc “OR” ®Ó kÕt hîp c¸c ®k
Mysql> SELECT * FROM pet WHERE species=”snake” OR
sex=”bird”;
• “AND” vµ “OR” cã thÓ ®−îc trén lÉn nhau ,nÕu thùc hiÖn ®iÒu ®ã
tèt h¬n hÕt h·y sö dông dÊu ngoÆc ®¬n.
Msql> SELECT * FROM pet WHERE (species = "cat" AND sex =
“m”> OR (species = "dog" AND sex = "f");
2. Lùa chän c¸c cét:
• NÕu b¹n kh«ng muèn xem toµn bé b¶ng mµ chØ xem nh÷ng cét mµ
b¹n ®ang quan t©m
.VÝ dô nÕu b¹n muèn biÕt c¸c con vËt cña m×nh ®−îc sinh khi nµo
,h·y chän c¸c c«t tªn vµ ngµy sinh:
Msql> SELECT name, birth FROM pet;
• §Ó t×m ra ai së h÷u nh÷ng con vÑt ,sö dông c©u lÖnh sau:
Mysql> SELECT owner FROM pet;
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
93
• Tuy nhiªn ,chó ý r»ng c©u lÖnh ch¼ng qua lµ lÊy l¹i tr−ßng
ng−êi së h÷u tõ mçi b¶n ghi,vµ mét vµi trong sè chóng xuÊt
hiÖn nhiÒu h¬n mét lÇn.§Ó c¸c gi¸ trÞ kh«ng bÞ l¨p l¹i ta thªm tõ
kho¸ DISTINCT:
Mysql> SELECT DISTINCT owner FROM pet;
• B¹n cã thÓ sö dông diÒu kiÖn WHERE ®Ó lùa cjän c¸c dßng cïng víi
c¸c cét.VÝ dô ®Ó xem ngµy sinh cña chã vµ mÌo th«i th× ta lµm nh−
sau:
Msql> SELECT name, species, birth FROM pet
->WHERE species = "dog" OR species = "cat";
3. Ph©n lo¹i c¸c hµng
• Cã thÓ b¹n ®· chó ý tíi c¸c vÝ dô tr−íc ®©y vµ thÊy c¸c hµng kÕt qu¶
®−îc hiÓn thÞ kh«ng theo mét thø tù ®Æc biÖt nµo .tuy nhiªn th−êng
dÔ dµng h¬n khi kiÓm tra kÕt qu¶ khi hµng ®· ®−îc ph©n lo¹i theo
mét c¸ch cã ý nghÜa .§Ó ph©n lo¹i mét kÕt qu¶ ta sö dông mÖnh ®Ò “
ORDER BY “ sau ®©y lµ vÝ dô vÒ ngµy sinh cña c¸c con vËt ®−îc
ph©n lo¹i theo ngµy:
Mysql> SELECT name, birth FROM pet ORDER BY birth;
• §Ó ph©n lo¹i theo thø tù ng−îc l¹i ,ta thªm tõ kho¸ “DESC” Vµo tªn
cét mµ b¹n ®ang ph©n lo¹i :
Mysql> SELECT name, birth FROM pet ORDER BY birth
DESC;
• B¹n cã thÓ s¾p xÕp trªn nhiÒu cét kh¸c nhau .VÝ dô ®Ó s¾p xÕp theo
kiÓu vËt sau ®ã lµ ngµy sinh mµ kh«ng quan t©m ®Õn kiÓu con vËt
®ång thêi c¸c con vËt trÎ nhÊt xÕp ®Çu tiªn ,ta sö dông c©u lÖnh
sau;
mysql> SELECT name, species, birth FROM pet ORDER BY
species, birth DESC;
Chó ý r»ng tõ kho¸ “DESC” chØ ¸p dông víi tªn cét ë ngay tr−íc
nã
4. X¸c ®Þnh ngµy th¸ng ,n¨m cho c¸c kÕt qu¶ tÝnh to¸n:
• MySQL cung cÊp mét rÊt nhiÒu chøc n¨ng mµ b¹n cã thÓ sö dông ®Ó
thùc hiÖn c¸c kÕt qu¶ tÝnh to¸n theo ngµy.Vi dô ®Ó tÝnh to¸n tuæi
hoÆc trÝch dÉn mét phÇn cña ngµy. §Ó x¸c ®Þnh mçi con vÑt cña b¹n
lµ bao nhiªu tuæi ,tÝnh to¸n tuæi nh− lµ kho¶ng c¸ch gi÷a ngµy sinh
vµ ngµy hiÖn t¹i. §iÒu ®ã ®−îc thùc hiÖn nh− sau:
mysql> SELECT name, (TO_DAYS(NOW())-
TO_DAYS(birth))/365 FROM pet;
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
94
• MÆc dï c¸c c©u lÖnh ®ang lµm viÖc nh−ng cã mét vµi ®iÒu vÒ nã
vÉn cã thÓ c¶i tiÕn .
• §Çu tiªn kÕt qu¶ cã thÓ ®−îc xem dÔ dµng h¬n nÕu c¸c hµng ®−îc
tr×nh bµy theo mét thø tù nµo ®ã
• Thø hai, tiªu ®Ò cho cét tuæi th× kh«ng cã ý nghÜa l¾m. VÊn ®Ò thø
nhÊt cã thÓ ®−îc gi¶i quyÕt b»ng c¸ch thªm vµo tõ kho¸ “ODER BY”
®Ó s¾p xÕp kÕt qu¶ theo tªn .§Ó liªn hÖ víi tiªu ®Ò cña cét, cung cÊp
mét tªn cho cét víi mét nh·n xuÊt hiÖn trong kÕt qu¶(®−îc gäi lµ bÝ
danh)
mysql> SELECT name, (TO_DAYS(NOW())-
TO_DAYS(birth))/365 AS age
-> FROM pet ORDER BY name;
• NÕu muèn s¾p xÕp kÕt qu¶ theo tuæi h¬n lµ theo tªn, ta chi viÖc sö
dông mét c©u lÖnh “ODER BY” kh¸c
mysql> SELECT name, (TO_DAYS(NOW())-
TO_DAYS(birth))/365 AS age
->FROM pet ORDER BY age;
• Mét c©u lÖnh cã thÓ ®−îc sö dông ®Ó x¸c ®Þnh tuæi thä cho
nh÷ng con vËt ®· chÕt. B¹n x¸c ®Þnh c¸c con vËt nµo ®−îc kiÓm tra
cã hay kh«ng gi¸ trÞ chÕt lµ NULL. Sau ®ã ®èi víi c¸c con cã gi¸
trÞ non_NULL, tÝnh to¸n sù kh¸c nhau gi÷a gi¸ trÞ chÕt vµ sinh.
mysql> SELECT name, birth, death, (TO_DAYS(death)-
TO_DAYS(birth))/365 AS age
FROM pet WHERE death IS NOT NULL ORDER BY age;
name birth Death age
Bowse 1989-08-31 1995-07-29 | 5.91
• C©u lÖnh sö dông “death is NOT NULL” vÉn tèt h¬n lµ
“death=!=NULL” bëi v× NULL lµ gi¸ trÞ ®Æc biÖt. §iÒu nµy ®−îc gi¶i
thÝch ë phÇn sau ,
• NÕu b¹n muèn biÕt con vËt nµo cã ngµy sinh vµo th¸ng sau ?víi kiÓu
tÝnh to¸n nµy ,n¨m vµ ngµy ®Òu kh«ng cã liªn quan ,b¹n ch¼ng qua chØ muèn
trÝch phÇn th¸ng trong cét ngµy sinh.Msql cung cÊp rÊt nhiÒu chøc n¨ng trÝch
®Én phÇn ngµy sinhnh− AR(),MONTH(),DAY OF MONTH() ,MONTH()
®Òu lµ chøc n¨ng phøc hîp .ë ®©y ®Ó xem nã lµm viÖc ra sao ,ch¹y mét c©u
lÖnh ®¬n gi¶n ®Ó hiÓn thÞ gi¸ trÞ cña c¶ ngµy sinh vµ th¸ng sinh
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
95
mysql> SELECT name, birth, MONTH(birth)
FROM pet;
• ViÖc t×m c¸c con vËt cã ngµy sinh vµo th¸ng sau hÕt søc dÔ dµng .Gi¶
sö th¸ng hiÖn t¹i cã th¸ng t− .Sau ®ã ,gi¸ trÞ th¸ng lµ 4 vµ b¹n t×m c¸c
con vËt ®−îc sinh vµo th¸ng n¨m nh− sau:
o mysql> SELECT name, birth FROM pet WHERE
MONTH(birth) = 5;
• TÊt nhiªn cã mét r¾c rèi nhá nÕu th¸ng hiÖn t¹i lµ th¸ng 12.B¹n kh«ng
chØ thªm 1 vµo sè th¸ng (12) vµ t×m xem con vËt nµo sinh vµo th¸ng 13
,bëi v× kh«ng cã th¸ng nh− vËy .Thay vµo ®ã ,b¹n t×m c¸c con vËt sinh
vµo th¸ng 1
• B¹n còng cã thÓ viÕt c©u lÖnh mµ nã lµm viÖc kh«ng quan t©m tíi th¸ng
hiÖn t¹i lµ bao nhiªu ,víi c¸ch ®ã b¹n kh«ng ph¶i sö dông 1 sè th¸ng riªng
biÖt nµo trong c©u lªnh DATE=A§() cho phÐp b¹n thªm mét kho¶ng thêi
gian vµo mét ngµy ®· ®−îc ®−a ra .NÕu b¹n thªm 1 th¸ng vµo gi¸ trÞ cña
NULL() ,sau ®o trÝch phÇn th¸ng víi MONTH(),kÕt qu¶ t¹o ra th¸ng mµ
chóng ta t×m ngµy sinh trong ®ã
mysql> SELECT name, birth FROM pet
->WHERE MONTH(birth) =
MONTH(DATE_ADD(NOW(), INTERVAL 1
MONTH));
• Mét c¸ch kh¸c ®Ó hoµn thµnh c«ng viÖc t−¬ng tù lµ ph¶i thªm 1 vµo ®Ó
cã th¸ng sau th¸ng hiÖn t¹i (sau khi sö dông chøc n¨ng module MOD)
®Ó “bäc xung quanh ” gi¸ trÞ th¸ng tíi 0 nÕu nã hiÖn t¹i lµ th¸ng 12
mysql> SELECT name, birth FROM pet
WHERE MONTH(birth) = MOD(MONTH(NOW()), 12) 1;
• Chó ý r»ng MONTH quay vßng lµ mét sè gi÷ th¸ng 1 vµ th¸ng 12 ,vµ
MOD quay vßng lµ mét sè gi÷a 0 vµ 11.Do §ã sù thªm ph¶i theo sau
MOD() nÕu kh«ng chóng ta sÏ ®i tõ th¸ng 11 ®Õn th¸ng 1
5. Lµm viÖc víi gi¸ trÞ NULL
• Gi¸ trÞ NULL cã thÓ g©y ng¹c nhiªn cho ®Õn khi b¹n lµm quen
víi nã .Theo kh¸i niÖm NULL cã nghÜa lµ”gi¸ trÞ kh«ng
cã”hoÆc “gi¸ trÞ kh«ng ®−îc biÕt ®Õn” vµ nã ®−îc xem xÐt ë
Name birth MONTH(birth
Fluffy 1993-02-04 2
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
96
mét møc ®é kh¸c biÖt h¬n so víi gi¸ trÞ kh¸c .§Ó kiÓm tra
NULL b¹n kh«ng thÓ sö dông c¸c to¸n tö so s¸nh sè häc
nh−:=,>,<...§Ó tù m×nh gi¶i thÝch ®iÒu nµy b¹n h·y thö c©u lÖnh
sau
mysql> SELECT 1 = NULL, 1 != NULL, 1 < NULL, 1 > NULL;
1 = NULL 1 != NULL 1 < NULL 1 > NULL
NULL NULL NULL NULL
• Râ rµng lµ b¹n kh«ng cã c¸c kÕt qu¶ cã nghÜa tõ c¸c sù ®èi
chiÕu nµy h·y sö dông
IS NULL vµ IS NOT NULL ®Ó thay thÕ.
mysql> SELECT 1 IS NULL, 1 IS NOT NULL;
1 IS NULL 1 IS NOT NULL
0 1
• Trong Mysql ,0 cã nghÜa lµ sai vµ 1 cã nghÜa lµ ®óng
• C¸ch sö lý ®Æc biÖt nµy cña NULL lµ lý do t¹i sao trong môc
tr−íc viÖc x¸c ®Þnh con vËt nµo ®· chÕt b»ng viÖc sö dông death
=NOT NULL thay v× death!=NULL ,l¹i cÇn thiÕt nh− vËy
6. Sù phï hîp vÒ kiÓu
• Mysql cung c©p c¸c mÉu chuÈn cho phÐp thay thÕ mét kiÓu
nµo ®ã:vÝ dô nh− sö dông‘_’®Ó chØ mét ký tù ®¬n lÎ nµo ®ã
‘%’®Ó chØ mét sè ký tù nµo ®ã cã thÓ lµ kh«ng cã ký tù nµo.Chó
ý r»ng trong mysql kh«ng sö dông dÊu=hay!= mµ sö dông
LIKE hoÆc NOT LIKE.
• Vi dô t×m mét tªn b¾t ®Çu b»ng ký tù ‘b’
mysql> SELECT * FROM pet WHERE name LIKE
"b%";
Name Owner species sex birth
Buffy
Bowser
Harold
Diane
dog
dog
F
M
1989-05-13
1989-08-31
• §Ó t×m tªn kÕt thóc b»ng ‘fy’:
mysql> SELECT * FROM pet WHERE name LIKE
"%fy";
• §Ó t×m tªn cã chøa mét ký tù b»ng ‘w’:
mysql> SELECT * FROM pet WHERE name LIKE
"%w%";
• Dïng LIKE:
mysql> SELECT * FROM pet WHERE name LIKE
"_____";
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
97
• Mét sè c¸c quy t¾c kh¸c:’
.Mét líp ký tù:®−îc bao bëi ‘[...]’,vÝ dô’ [abc]’’[1-9]’
.Ký hiÖu ‘*’®Ó chØ ký hiÖu trèng
.Sö dông ký hiÖu ‘^’’$’®Ó chØ b¾t ®Çu hoÆc kÕt thóc
®Ó sö dông thi ta ph¶I viÕt tõ kho¸ REGEXP phÝa tr−íc
• T×m tªn b¾t ®Çu víi ký tù ‘b’
mysql> SELECT * FROM pet WHERE name REGEXP
"^[bB]";
• T×m tªn kÕt thóc b»ng “fy”,sö dông ‘$’ :
mysql> SELECT * FROM pet WHERE name REGEXP
"fy$";
• T×m tªn cã chøa ký tù’w’sö dông ‘[wW]’®Ó t×m c¶ ký tù th−êng
vµ ký tù hoa:
mysql> SELECT * FROM pet WHERE name REGEXP
"[wW]";
• T×m tªn cã chøa ®óng 5 ký tù sö dông’^’vµ ‘$’®Ó t×m kiÕm:
mysql> SELECT * FROM pet WHERE name REGEXP
"^.....$";
B¹n còng cã thÓ thùc hiÖn nh− sau:
mysql> SELECT * FROM pet WHERE name REGEXP
"^.{5}$";
7. §Õm hµng
• C¸c c¬ së d÷ liÖu th−êng ®−îc sö dông ®Ó tr¶ lêi c©u hái
“møc ®é th−êng xuyªn cña mét sè kiÓu d÷ liÖu xuÊt hiÖn trong
b¶ng nh− thÕ nµo”VÝ dô ,b¹n cã thÓ muèn biÕt b¹n cã bao nhiªu
con vÑt ,hoÆc mçi ng−êi chñ cã bao nhiªu con vÑt ,hoÆc b¹n cã
thÓ thùc hiÖn rÊt nhiÒu kiÓu ®iÒu tra d©n sè c¸c con vËt cña
m×nh
• §Õm tæng sè con vËt mµ b¹n cã th× t−¬ng tù nh− c©u hái lµ
“cã bao nhiªu hµng trong b¶ng vÒ con vÑt” khi ®ã mét b¶n ghi
trªn mét con vÑt ,chøc n¨ng COUNT() ®Õm sè kÕt qu¶ non-
NULL,do ®ã c©u lÖnh ®Õm con vËt cña b¹n nh− sau:
mysql> SELECT COUNT(*) FROM pet;
• DÔ dµng h¬n ,b¹n cã thÓ gäi tªn cña nh÷ng ng−êi chñ së h÷u
c¸c con vÑt.B¹n cã thÓ sö dông COUNT() nÕu b¹n muèn t×m ra
mçi ng−êi chñ cã bao con vÑt
mysql> SELECT owner, COUNT(*) FROM pet
GROUP BY owner;
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
98
• Chó ý r»ng ,sö dông GROUP BY ®Ó tËp hîp l¹i tÊt c¶ c¸c b¶n
ghi cña mçi ng−êi chñ.NÕu kh«ng cã nã,tÊt c¶ nh÷ng c¸i mµ thu
d−îc chØ lµ 1 bøc ®iÖn b¸o lçi
mysql> SELECT owner, COUNT(owner) FROM pet;
ERROR 1140 at line 1: Mixing of GROUP columns
(MIN(),MAX(),COUNT()...)
with no GROUP columns is illegal if there is no
GROUP BY clause
• COUNT() vµ GROUP BY rÊt cã Ých cho viÖc m« t¶ d÷ liÖu cña
b¹n theo nh÷ng c¸ch kh¸c nhau.
• VÝ dô sau ®©y sÏ chØ ra nh÷ng c¸ch kh¸c nhau ®Ó thùc hiÖn c¸c
®iÒu tra d©n sè con vËt
Sè con vËt theo loµi:
mysql> SELECT species, COUNT(*) FROM pet
GROUP BY species;
Species COUNT(*)
Bird
cat
dog
hamster
snake
2
2
3
1
1
Sè con vËt theo giíi tÝnh:
mysql> SELECT sex, COUNT(*) FROM pet GROUP
BY sex;
(trong phÇn nµy ,NULL ¸m chØ kh«ng biÕt giíi tÝnh)
Sex COUNT(*)
NULL
F
M
4
1
1
Sè con vËt theo c¶ loµi vµ giíi tÝnh:
mysql> SELECT species, sex, COUNT(*) FROM pet GROUP
BY species, sex;
• B¹n kh«ng cÇn thao t¸c trªn toµn bé mét b¶ng khi sö dông
COUNT().VÝ dô c©u lÖnh tr−íc khi ®−îc thùc hiÖn chØ trªn chã vµ mÌo
,nh− sau:
mysql> SELECT species, sex, COUNT(*) FROM pet
-> WHERE species = "dog" OR species = "cat"
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
99
-> GROUP BY species, sex;
• HoÆc nÕu b¹n muèn biÕt sè con vËt theo giíi tÝnh vµ chØ víi nh÷ng con
®É biÕt giíi tÝnh:
mysql> SELECT species, sex, COUNT(*) FROM pet
-> WHERE sex IS NOT NULL
-> GROUP BY species, sex;
III. Sö dông nhiÒu h¬n mét b¶ng
• B¶ng vÒ con vÑt chØ gi÷ thèng kª lµ b¹n cã nh÷ng con vÑt nµo .NÕu
b¹n muèn ghi c¸c th«ng tin kh¸c vÒ chóng ,nh− lµ c¸c sù kiÖn trong
cuéc sèng cña chóng nh− viÖc ®Õn gÆp b¸c sÜ thó y ,hoÆc c¸c løa ®Î
®−îc sinh khi nµo ,b¹n cÇn mét b¶ng kh¸c ,vËy b¶ng nµy nªn cÇn g×
nã cÇn chøa tªn con vÑt ,v× vËy b¹n cã thÓ biÕt mçi sù kiÖn nãi ®Õn
con vËt nµo
CÇn ngµy sinh ®Ó b¹n biÕt ®−îc sù kiÖn ®½ x¶y ra khi nµo
CÇn mét tr−êng ®Ó m« t¶ sù kiÖn
NÕu b¹n muèn cã thÓ ph©n lo¹i ®−îc c¸c sù kiÖn th× viÖc cã mét
tr−êng kiÓu sù kiÖn rÊt h÷u Ých
• Khi nh÷ng yªu cÇu ®ã ®−îc ®−a ra viÖc tr×nh bµy CREATE
TABLE cho b¶ng co thÓ nh− sau:
mysql> CREATE TABLE event (name
VARCHAR(20), date DATE,
->type VARCHAR(15), remark VARCHAR(255));
• Víi b¶ng vÒ con vÑt ,viÖc chÌn c¸c b¶n ghi cÇn tiÕn hµnh b»ng viÖc
thiÕt lËp c¸c vïng ®Ó l−u tr÷ th«ng tin.
Fluffy 1995-05-15 litter 4 kittens, 3 female, 1 male
Buffy 1993-06-23 litter 5 puppies, 2 female, 3 male
Buffy 1991-10-12 litter 3 puppies, 3 female
Chirpy 1995-05-15 vet needed beak straightened
Slim 1998-08-28 vet broken rib
Bowser 1998-12-09 kennel
Fang 1993-06-23 kennel
Fang 1998-12-09 birthday Gave him a new chew toy
Claws 1998-08-28 birthday Gave him a new flea collar
• ChÌn c¸c b¶n ghi nh− sau:
mysql> LOAD DATA LOCAL INFILE "event.txt"
INTO TABLE event;
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
100
• Dùa trªn nh÷ng g× mµ b¹n häc ®−îc tõ c¸c c©u lÖnh ch¹y b¶ng
“pet” b¹n cã thÓ thùc hiÖn viÖc gäi tªn trªn c¸c b¶n ghi trong b¶ng
event,nguyªn t¾c vÉn kh«ng thay ®æi .Nh−ng khi b¶n th©n b¶ng event
kh«ng ®ñ ®Ó tr¶ lêi c¸c c©u hái mµ b¹n cã thÓ hái ?
• Gi¶ sö b¹n muèn t×m tuæi cña mçi con vËt khi nã cã løa ®Î .B¶ng
evevt chØ ra ®iÒu ®ã xuÊt hiÖn khi nµo ,nh−ng ®Ó tÝnh to¸n tuæi cña con
mÑ b¹n cÇn ngµy sinh cña nã .Nã ®−îc l−a tr÷ trong b¶ng pet,nªn b¹n
cÇn c¶ hai b¶ng cho c©u lÖnh nµy:
mysql> SELECT pet.name, (TO_DAYS(date) -
TO_DAYS(birth))/365 AS age, remark
-> FROM pet, event
->WHERE pet.name = event.name AND type = "litter";
• Cã rÊt nhiÒu ®iÒu ®¸ng l−u ý vÒ c©u lÖnh nµy
MÖnh ®Ò FROM ghi vµo danh s¸ch c¶ hai b¶ng khi
c©u lÖnh cÇn lÊy th«ng tin tõ c¶ hai
Khi kÕt hîp th«ng tin tõ c¸c b¶ng kh¸c nhau ,b¹n cÇn
®Þnh râ cã bao nhiªu b¶n ghi vµ mçi b¶n ghi cã thÓ ®−îc nèi víi
c¸c b¶n ghi cña b¶n kia.§iÒu ®ã rÊt dÔ khi c¶ hai b¶n ghi ®Òu cã
cïng sè cét.C©u lÖnh sö dôngWHERE dïng ®Ó nãi c¸c b¶n ghi ë
hai b¶ng dùa trªn gi¸ trÞ tªn
Khi tªn cét xuÊt hiÖn c¶ ë hai b¶ng ,b¹n ph¶i x¸c
®Þnh vÒ b¶n nµo b¹n t×m ®Õn kiÓu ¸m chØ cét .§iÒu nµy ®−îc thùc
hiÖn b»ng viÖc quy chiÕu tªn cña b¶ng víi tªn cña cét
• B¹n kh«ng nhÊt thiÕt ph¶i cã hai b¶ng kh¸c nhau ®Ó tiÕn hµnh
liªn kÕt .§«i khi viÖc tù liªn kÕt l¹i rÊ h÷u Ých ,nÕu
b¹n muèn
IV. KÕt nèi vµ kh«ng kÕt nèi tíi server
1. §Ó kÕt nèi tíi server b¹n th−êng cung cÊp cho My SQL mét
username, vµ mét password. NÕu server ch¹y trªn mét m¸y kh¸c h¬n
lµ m¸y b¹n ®ang login. B¹n còng cÇn x¸c ®Þnh mét hostname ®Ó liªn
l¹c víi ng−êi qu¶n trÞ cña b¹n ®Ó t×m ra nh÷ng kÕt nèi mµ b¹n sÏ sö
dông ®Ó kÕt nèi.
Khi b¹n biÕt chÝnh x¸c hostname,username,password b¹n cã thÓ
kÕt nèi nh− sau :
shell> mysql -h host -u user -p
Enter password: ********
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
101
2. Mét vµi My SQL æn ®Þnh cho phÐp ng−êi sö dông kÕt nèi mµ kh«ng cã
tªn tõ user tíi server ®ang ch¹y localhost trong nh÷ng tr−êng hîp nµy
b¹n cã thÓ kÕt nèi tíi server ®ã nh− sau:
shell> mysql
Sau khi b¹n b¹n ®· kÕt nèi thµnh c«ng b¹n cã thÓ kÕt thóc viÖc kÕt
nèi nh− sau :
mysql> QUIT
B¹n còng cã thÓ sö dông Ctr-D.
VI. VÝ dô vÒ c¸c lÖnh c¬ b¶n
*Sau ®©y lµ nh÷ng vÝ dô vÒ c¸ch gi¶i quyÕt vÊn ®Ò cïng víi mysql
* Mét vµi vÝ dô sö dông hµng shop ®Ó l−u tr÷ gi¸ cña mçi ®Ò môc
cho mçi th−¬ng nh©n.Gi¶ sö r»ng mçi th−¬ng nh©n cã mé tËp hîp
gi¸ cho mçi ®Ò môc .Sau ®ã lµ kho¸ cho mçi b¶n ghi
B¹n cã thÓ t¹o ra mét b¶ng nh− sau:
CREATE TABLE shop (
article INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL,
dealer CHAR(20) DEFAULT '' NOT NULL,
price DOUBLE(16,2) DEFAULT '0.00' NOT NULL,
PRIMARY KEY(article, dealer));
INSERT INTO shop VALUES
(1,'A',3.45),(1,'B',3.99),(2,'A',10.99),(3,'B',1.45),(3,'C',1.69),
(3,'D',1.25),(4,'D',19.95);
*VÝ dô vÒ d÷ liÖu nh− sau:
SELECT * FROM shop
article Dealer Price
0001
0001
0001
0002
0003
0004
A
B
A
G
D
F
3.45
3.99
10.99
1.45
1.69
1.25
19.95
1. Gi¸ trÞ lín nhÊt cho mçi cét
Sè môc cao nhÊt lµ bao nhiªu:
SELECT MAX(article) AS article FROM shop
Article
4
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
102
2.Dßng l−u tr÷ gi¸ trÞ lín nhÊt chøa trong cét :
T×m sè dealer vµ price cña c¸c article ®¾t nhÊt
SELECT article, dealer, price
FROM shop
WHERE price=(SELECT MAX(price) FROM shop)
(trong mysql kh«ng cã thñ tôc lùa chän)
nªn ®Ó lµm ®iÒu ®ã ph¶i chia thµnh hai b−íc
T×m gi¸ cao nhÊt tõ b¶ng b»ng lÖnh SELECT
Sö dông gi¸ trÞ nµy ®Ó hoµn thµnh c¸c c©u lÖnh tiÕp theo
SELECT article, dealer, price
FROM shop
WHERE price=19.95
Mét c¸ch lµm kh¸c lµ s¾p xÕp c¸c hµng gi¶m dÇn theo gi¸ vµ chØ ®−a ra
hµng ®Çu tiªn sö dông LIMIT:
SELECT article, dealer, price
FROM shop
ORDER BY price DESC
LIMIT 1
3. Gi¸ trÞ m· cña cét:mçi nhãm:chØ mét gi¸ trÞ
* víi mçi article ,t×m dealer(s) sao cho gi¸ lµ cao nhÊt
* trong ANSI SQL nã sÏ lµm cïng víi thñ tôc nh− sau
SELECT article, dealer, price
FROM shop s1
WHERE price=(SELECT MAX(s2.price)
FROM shop s2
WHERE s1.article = s2.article)
*Trong mysql tèt nhÊt lµ lµm tõng b−íc
a.§−a ra danh s¸ch gåm 2 cét(article,maxpice)
b.Víi mçi article chän nh÷ng dßng mµ cã gi¸ cao nhÊt
*VÝ dô nh− sau:
CREATE TEMPORARY TABLE tmp (
article INT(4) UNSIGNED ZEROFILL
DEFAULT '0000' NOT NULL,
price DOUBLE(16,2) DEFAULT '0.00'
NOT NULL);
LOCK TABLES article read;
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
103
INSERT INTO tmp SELECT article, MAX(price)
FROM shop GROUP BY article;
SELECT article, dealer, price FROM shop, tmp
WHERE shop.article=tmp.article AND
shop.price=tmp.price;
UNLOCK TABLES;
DROP TABLE tmp;
*NÕu b¹n kh«ng sö dông mét temporary table b¹n ph¶i dïng kho¸ “tmp” table
*Cã thÓ lµm ®iÒu ®ã víi nh÷ng c©u lÖnh ®¬n lÎ
*Cã thÓ gäi hµm “MAX-CONCAT”
SELECT article,
SUBSTRING( MAX(
CONCAT(LPAD(price,6,'0'),dealer) ), 7) AS dealer,
0.00LEFT( MAX(
CONCAT(LPAD(price,6,'0'),dealer) ), 6) AS price
FROM shop
GROUP BY article;
4. Sö dông kho¸ ngoµi
B¹n kh«ng cÇn kho¸ ngoµi ®Ó nèi hai b¶ng
ChØ nh÷ng thø trong mysql kh«ng lµm ®−îc CHECK ®Ó ch¾c ch¾n r»ng
nh÷ng kho¸ b¹n sö dông thùc sù tån t¹i trong b¶ng liªn quan vµ nã kh«ng tù
®éng xo¸ c¸c dßng tõ b¶ng cïng víi kho¸ ngoµi ®−îc ®Þnh nghÜa.NÕu b¹n sö
dông kho¸ b×nh th−êng nã vÉn lµm viÖc tíi cïng:
CREATE TABLE persons (
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
name CHAR(60) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE shirts (
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
style ENUM('t-shirt', 'polo', 'dress') NOT NULL,
color ENUM('red', 'blue', 'orange', 'white', 'black') NOT NULL,
owner SMALLINT UNSIGNED NOT NULL REFERENCES persons,
PRIMARY KEY (id)
);
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
104
INSERT INTO persons VALUES (NULL, 'Antonio Paz');
INSERT INTO shirts VALUES
(NULL, 'polo', 'blue', LAST_INSERT_ID()),
(NULL, 'dress', 'white', LAST_INSERT_ID()),
(NULL, 't-shirt', 'blue', LAST_INSERT_ID());
INSERT INTO persons VALUES (NULL, 'Lilliana Angelovska');
INSERT INTO shirts VALUES
(NULL, 'dress', 'orange', LAST_INSERT_ID()),
(NULL, 'polo', 'red', LAST_INSERT_ID()),
(NULL, 'dress', 'blue', LAST_INSERT_ID()),
(NULL, 't-shirt', 'white', LAST_INSERT_ID());
SELECT * FROM persons;
Id Name
1
2
Antonio Paz
Lilliana Angelovska
SELECT * FROM shirts;
Id style color owner
1
2
3
4
5
6
7
Polo
Dress
t-shirt
Dress
Polo
Dress
t-shirt
blue
white
blue
orange
red
blue
white
1
1
1
2
2
2
2
SELECT s.* FROM persons p, shirts s
WHERE p.name LIKE 'Lilliana%'
AND s.owner = p.id
AND s.color <> 'white';
Id style color owner
4
5
6
Dress
Polo
Dress
orange
red
blue
2
2
2
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
105
Ch−¬ng IV : HÖ thèng quyÒn truy nhËp c¬ Së D÷ LIÖU
Trong MYSql
I. Giíi thiÖu chung vÒ vÊn ®Ò an toµn vµ b¶o mËt cña hÖ thèng
Trong viÖc th¶o luËn vÒ vÊn ®Ò an toµn cña hÖ thèng chóng ta dÆc biÖt nhÊn
m¹nhviÖc cÇn thiÕt cña viÖc b¶o vÖ an toµn cho m¸y chñ ( kh«ng ®¬n gi¶n lµ
m¸y chñ Mysql ) chèng l¹i sù tÊn c«ng d−ãi mäi h×nh thøc : nghe trém, söa
®æi cÊu tróc ….
Mysql sö dông danh s¸ch ®iÒu khiÓn truy nhËp ( ALSC ) (ACCESS
CONTROL LIST) ®Ó ®¶m b¶o an toµn b¶o mËt cña viÖc kÕt nèi,c©u truy vÊn
vµ c¸c thao t¸c kh¸c mµ ng−êi sö dông cè g¾ng thùc hiÖn cïng tån t¹i mét sè
sù hæ trî m· ho¸ kÕt nèi gi÷a m¸y chñ Mysql vµ m¸y kh¸ch .
Khi dïng Mysql chóng ta cÇn chó ý c¸c ®iÒu sau ®©y:
- kh«ng cho phÐp ng−êi sö dông truy cËp ®Õn b¶ng Mysql (ngo¹i trõ nh÷ng
ng−êi dïng root)
- häc hÖ thèng c¸c quyÒn truy xuÊt cña Mysql c¸c c©u lÖnh cÊp ph¸t
quuyÒn vµ huû quyÒn cña ng−êi sö dôngnh»m môc ®Ých ng¨n chÆn viÖc
truy xuÊt tíi Mysql, kh«ng nªn cÊp ph¸t quyÒn h¹n nhiÒu h¬n møc cÇn
thiÕt, kh«ng nªn cÊp quyÒn tíi tÊt c¶ c¸c m¸y chñ.
B¹n cÇn kiÓm tra nh÷ng ®iÒu sau ®©y:
- cè g¾ng thùc hiÖn Mysql-u root ,nÕu b¹n cã thÓ kÕt nèi víi m¸y chñ mµ
kh«ng cÇn mËt khÈu, b¹n ®· cã mét sè vÊn ®Ò råi ®ã, bÊt kú mét ng−êi
nµo còng cã thÓ kÕt nèi víi m¸y chñ Mysql víi®Çy ®ñ quyÒn truy xuÊt,
b¹n cÇn xem l¹i c¸c chØ thÞ khi cµi ®Æt Mysql, chó ý ®Õn viÖc ®Æt mËt
khÈu gèc (root).
- Sö dông lÖnh show grant vµ kiÓm tra ng−êi dïng truy cËp ®Õn dÏ liÖu g×,
thu håi bít quyÒn h¹n kh«ng cÇn thiÕt .
- Kh«ng nªn l−u mËt khÈu d−íi d¹ng v¨n b¶n thuÇn tuý trong c¬ së d÷ liÖu,
v× khi m¸y cña b¹n bÞ mét kÎ kh¸c truy nhËp th× nh÷ng kÎ truy nhËp cã
thÓ cã ®Çy ®ñ mét danh s¸ch c¸c mËt khÈu vµ sö dông chóng.
- Kh«ng nªn dïng mËt khÈu ë tõ ®iÓn v× cã nhiÒu ch−¬ng tr×nh ®Æc biÖt ®Ó
ph¸ mËt khÈu nµy .
- H·y dung filewall nã sÏ b¶o vÖ tèi thiÓu lµ 50% tÊt c¶ c¸c kiÓu khai th¸c
kh¸c nhau cña phÇn mÒn v× vËy h·y ®Æt mysql bªn c¹nh firewall
- KiÓm tra ng−êi dïng cã nhËp d÷ liÖu ®¸ng tin cËy kh«ng
- Kh«ng nªn truyÒn t¶i c¸c d÷ liÖu ch−a ®−îc m· ho¸ trªn m¹ng v× d÷ liÖu
®ã cã thÓ bÞ chÆn l¹i ®Ó sö dông .
- Häc c¸ch sö dông c¸c tiÖn Ých tepdump, string ®Ó b¶o vÖ
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
106
II. Lµm thÕ nµo ®Ó Mysql trë nªn an toµn chèng l¹i bän téi ph¹m m¸y
tÝnh
khi kÕt nèi ®Õn c¬ së d÷ liÖu th«ng th−êng b¹n hay dïng mét mËt khÈu,
tuy nhiªn viÖc m· ho¸ chóng th× kh«ng htùc sù m¹nh vµ mét sè næ lùc
tÊn c«ng cña nh÷ng kÎ ph¸ ho¹i cã thÓ bÎ ®−îc mËt khÈu cña b¹n nÕu
nh− nh÷ng kÎ ph¸ ho¹i cã thÓ chÆng ®øng ®−îc viÖc l−u th«ng gi÷a m¸y
chñ vµ m¸y kh¸ch, tÊt c¶ c¸c th«ng tin truyÒn trªn m¹ng ®Òu cã thÓ bÞ
ng−êi nµo ®ã chÆng ®øng l¹i vµ sö dông chóng, nÕu b¹n lo l¾ng vÒ ®iÒu
nµy th× b¹n cã thÓ sö dông viÖc m· ho¸ kÕt nèi d¹ng tep/ip khi kÕt nãi
gi÷a m¸y chñ vµ m¸y kh¸ch.
§Ó ®¶m b¶o an toµn cho hÖ thèng b¹n cÇn thùc hiÖn nh÷ng viÖc sau :
- Sö dông password cho tÊt c¶ ng−êi dïng v× nÕu kh«ng dïng password th×
bÊt kú ng−êi dïng nµo còng cã thÓ truy nhËp c¬ së d÷ liÖu
- B¹n cã thÓ thay ®æi password cho tÊt c¶ ng−êi dïng b»ng ch¸ch thay ®æi
kÞch b¶n Mysql_install_db tr−íc khi thùc hiÖn mysql hoÆc söa password
cho ng−êi dïng root
- sell>mysql-u root mysql;
mysql>update user set password =password (‘ne− password’);
where user =’root’;
mysql>flóh privileges;
- Kh«ng nªn ch¹y mysql nh− ng−êi dïng unix root ®iÒu nµy rÊt nguy hiÓm
v× ng−êi cã quyÒn ®ãi víi file cã thÓ t¹o file t−¬ng tù nh− root, ®Ó ng¨n
chÆn ®iÒu nµy th× mysql th−êng kh«ng ch¹y mysql nh− d¹ng root trõ khi
cã chØ thÞ trùc tiÕp lµ :
-user=root;
NÕu ®Æt mËt khÈu cho ng−êi dïng unix root trong kÞch b¶n cña
mysql server th× b¹n ph¶i ®¶m b¶o r»ng nã chØ cã thÓ ®−îc ®äc bëi
ng−êi dïng root.
- KiÓm tra ng−êi dïng Unix r»ng mysql chØ ch¹y ®èi víi ng−êi dïng cã
quyÒn read/write.
- Trong c¸c tr¹m lµm viÖc Unix kh«ng nªn ch¹y Mysql nh− ng−êi dïng
root trõ phi ®iÒu ®ã thùc sù cÇn thiÕt .
- Kh«ng nªn g¸n quyÒn process cho tÊt c¶ ng−êi dïng .
- Kh«ng nªn g¸n quyÒn ®«Ýo víi file cho tÊt c¶ ng−êi dïng .
Mét sè sù chän lùa liªn quan ®Õn viÖc an toµn khi khëi ®éng Mysql
-- secure : tr¶ l¹i sè ip bëi gethost by name() lêi gäi hÖ thèng sÏ kiÓm tra ®Ó
®¶m b¶o ch¾c ch¾n r»ng chóng sÏ tr¶ l¹i tªn cña m¸y chñ, ®iÒu nµy sÏ g©y
khã kh¨n cho nh÷ng ai phÞa ra mét tªn m¸y ®Ó lÊy ®Þa chØ.
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
107
-- skip-grant-table : ®iÒu nµy sÏ lµm cho hÖ thèng kh«ng sö dông hÖ thèng
quuyÒn vµ tÊt c¶ mäi ng−êi ®Òu cã ®Çy ®ñ quyÒn h¹n ®Ó truy nnhËp vµo
c¬ së d÷ liÖu (b¹n cã thÓ sö dông hÖ thèng quyÒn b»ng c¸ch thùc hiÖn
mysqladmin flush-privileges).
-- skip-name-resolve: sù chän lùa nµy sÏ lµm cho tÊt c¶ c¸c gi¸ trÞ trong cét
host cña b¶ng ph©n quyÒn ®Òu lµ ®Þa chØ IP hoÆc lµ localhost.
-- skip-networking: kh«ng cho phÐp giao thøc tep/ip ®−îc kÕt nèi .
-- skip-show database: khi cã lÖnh SHOW DATABASE sÏ kh«ng tr¶ l¹i mét
gi¸ trÞ nµo c¶ .
-- safe-show-database: lÖnh SHOW DATABASE sÏ chØ tr¶ l¹i gi¸ trÞ ®èi víi
nh÷ng ng−êi cã quyÒn ®èi víi lÖnh nµy .
III. Tªn ng−êi dïng vµ mËt khÈu trong mysql
Cã rÊt nhiÒu nÐt ph©n biÖt gi÷a c¸c c¸ch thøc kh¸c nhau mµ tªn ng−êi dïng
(user name ) vµ mËt khÈu(pasword) ®−îc sö dông trong Mysql vµ c¸ch thøc
chóng ®−îc dïng trong Windows vµ Unix.
User name®−îc mysql sö dông cho môc ®Ých nhËn d¹ng hÇu hÕt m¸y kh¸ch
Myssql mÆc ®Þnh lµ khi ®¨ng nhËp vµo hÖ thèng sö dông tªn ng−êi dïng
Unix hiÖn t¹i ®iÒu nµy cã mét ®iÒu kh«ng hay. ch−¬ng tr×nh ë m¸y kh¸ch
cho phÐp nhiÒu tªn ng−êi dïng kh¸c nhau ®−îc chØ ra víi lùa chän –u hoÆc –
user ®iÒu nµy sÏ lµm cho hÖ thèng trë nªn kh«ng an toµn trong mäi tr−êng
hîp trõ khi tÊt c¶ c¸c tªn ng−êi dïng ®Òu co password bæ v× bÊt kú mét ng−êi
nµo ®ã còng cã thÓ nèi víi m¸y chñ sö dông mét tªn nµo ®ã vµ hä sÏ thµnh
c«ng nÕu nh− tªn ®ã kh«ng cã password .
- Tªn cña ng−êi dïng cã thÓ dµi 16 kÝ tù.
- Password trong Mysql kh«ng cã liªn hÖ ®èi víi password trong Unix.
Kh«ng cã sù liªn hÖ cÇn thiÕt gi÷a mËt khÈu b¹n sö dông ®Ó ®¨nh nhËp
vµo m¸y tÝnh unixvowis mËt khÈu b¹n dïng ®Ó ®¨ng nhËo vµo c¬ së d÷
liÖu
Gi÷ mËt khÈu mét c¸ch an toµn
Mét diÒu kh«ng hay nÕu nh− mËt khÈu cña b¹n bÞ mét ng−êi kh¸c ph¸t hiÖn
ra.D−íi ®©y lµ nh÷ng ph−¬ng ph¸p mµ b¹n chØ râ mËt khÈu cña m×nh vµ c¸c
®¸nh gi¸ vÒ c¸c nguy hiÓm cho tõng ph−¬ng ph¸p .
Sö dông –pyour_pass hoÆc –password=your_pass trªn dßng lÖnh, ®iÒu nµy
th× tiÖn lîi nh−ng kh«ng an toµn v× mËt khÈu c¶u b¹n sÏ râ rµng ®èi víi
ch−¬ng tr×nh tr¹ng th¸i lµm viÖc cña hÖ thèng, vµ mét
ng−êi dïng kh¸c cã thÓ thùc hiÖn mét lÖnh hiÓn thÞ.
Sö dông –p trong tr−êng hîp nµy ch−¬ng tr×nh ë m¸y kh¸ch sÏ yªu cÇu nhËp
mËt khÈu tõ dßng lÖnh
Sell>mysql-u user_name-p
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
108
Enter password :********
ViÖc nhËp mËt khÈu sÏ an toµn h¬n v× nã sÏ kh«ng bÞ nh×n thÊy bëi ng−êi
dïng kh¸c. Tuy nhiªn viÖc nhËp mËt khÈu kiÓu nµy chØ thÝch hîp cho nh÷ng
ch−¬ng tr×nh mµ b¹n ch¹y theop lèi t−¬ng t¸c .NÕu nh− b¹n gäi mét kÞch b¶n
cña m¸y kh¸ch th× sÏ kh«ng cã c¬ héi ®Ó nhËp mËt khÈu tõ thiÕt bÞ ®Çu cuèi .
B¹n còng cã thÓ dïng ph−¬ng ph¸p l−u mËt khÈu cña b¹n vµo file cÊu h×nh
(vÝ dô b¹n cã thÓ t¹o ra mét danh s¸ch c¸c mËt khÈu trong phÇn [client] cña
file ’My.cnf’ trong Home Directory cña m×nh nÕu theo c¸ch nµy file kh«ng
nªn ®Ó d¹ng cã thÓ ®äc ghi.
B¹n cã thÓ l−u mËt khÈu trong biÕn m«i tr−êng MySQL_pwd nh−ng tr−êng
hîp nµy th−êng Ýt dïng v× nã kh«ng an toµn.
IV. HÖ thèng quyÒn truy xuÊt ®−îc cung cÊp bëi MySQL
Th«ng tin vÒ quyÒn truy xuÊt cña ng−êi sö dông ®−îc l−u tr÷ trong c¸c b¶ng
User, D, Host, Table_Priv vµ b¶ng Column_Priv trong c¬ së d÷ liÖu MySQL,
MySQL server sÏ ®äc n«it dung cña c¸c b¶ng khi khëi ®éng.
B¶ng sau ®©y liÖt kª c¸c quyÒn vµ t−¬ng øng víi c¸c cét liªn quan ®Õn quyÒn
vµ ng÷ c¶nh mµ c¸c quyÒn ®ã ¸p dông.
C¸c quyÒn Cét Ng÷ c¶nh
Select Select_Priv B¶ng
Insert Insert_Priv B¶ng
Update Update_Priv B¶ng
Delete Delete_Priv B¶ng
Index Index_Priv B¶ng
Alter Alter_Priv B¶ng
Creat Creat_Priv CSDL, B¶ng, ChØ sè
Drop Drop_Priv CSDL hoÆc B¶ng
Grant Grant_Priv CSDL hoÆc B¶ng
References References_Priv CSDL hoÆc B¶ng
Reload Reload_Priv Qu¶n trÞ m¸y chñ
Shutdown Shutdown_Priv Qu¶n trÞ m¸y chñ
Process Process_Priv Qu¶n trÞ m¸y chñ
file file_Priv Qu¶n trÞ m¸y chñ
• QuyÒn Select, Insert, Delete, Update cho phÐp b¹n thùc hiÖn c¸c thao t¸c
®èi víi c¸c h¶ng cña b¶ng trong c¬ së d÷ liÖu.
• QuyÒn Alter cho phÐp b¹n sö dông c©u lÖnh Alter Table.
• QuyÒn Creat, Drop cho phÐp b¹n t¹o míi mét CSDL, b¶ng hoÆc xo¸
CSDL b¶ng ®· tån t¹i, chó ý r»ng nÕu b¹n cÊp ph¸t quyÒn Creat, Drop cho
ng−êi sö dông, th× ng−êi dïng cã thÓ xo¸ CSDL mµ trong ®ã quyÒn truy
nhËp ®Õn MySQL ®−îc l−u tr÷.
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
109
• QuyÒn Grant cho phÐp b¹n cÊp ph¸t quyÒn cho nh÷ng ng−êi dïng kh¸c
nh÷ng quyÒn mµ b¹n cã.
• QuyÒn ®èi víi file cho phÐp ®äc víi ghi ®èi víi file trªn server, sö dông
c¸c lÖnh LOAD DATA INFILE vµ SELECT.. INTO OUTFILE bÊt k×
ng−êi dïng nµo ®−îc g¸n quyÒn nµy ®Òu cã thÓ ®äc hoÆc hoÆc ghi ®èi víi
file mµ SQL cã thÓ ®äc hoÆc ghi.
• Nh÷ng quyÒn cßn l¹i ®−îc phôc vô cho c«ng viÖc qu¶n trÞ mµ chóng ®−îc
thùc hiÖn bëi ch−¬ng tr×nh MySQL Admin. B¶ng d−íi ®©y sÏ chØ cho b¹n
nh÷ng lÖnh mµ quyÒn qu¶n trÞ cho phÐp b¹n thùc hiÖn.
QuyÒn Nh÷ng lÖnh cã thÓ thùc hiÖn
Reload Reload, refresh, flush_privileges, flush-hosts, flush-logs, flush-
tables
Shutdown Shutdown
Process Processlist, kills
LÖnh Reload sÏ chØ thÞ cho m¸y chñ thùc hiÖn viÖc ®äc l¹i b¶ng c¸c ph©n
quyÒn, lÖnh refresh n¹p l¹i tÊt c¶ c¸c b¶ng, më vµ ®ãng tÊt c¶ c¸c file log.
LÖnh flush-privileges t−¬ng tù nh− lÖnh reload, mét sè lÖnh flush-* kh¸c
thùc hiÖn chøc n¨ng nh− refresh, nh−ng cã giíi h¹n hÑp h¬n lÖnh refresh, nã
sÏ thÝch hîp trong mét sè tr−êng hîp, vÝ dô ban chØ cµn Flush ®èi víi log file
th× lÖnh flush-logs thÝch hîp h¬n lÖnh refresh.
• LÖnh Shutdown sÏ lµm cho m¸y chñ ngõng ho¹t ®éng.
• Processlist sÏ hiÓn thÞ nh÷ng th«ng tin trong suèt qu¸ tr×nh ho¹t ®éng
víi m¸y chñ.
• LÖnh kills sÏ t¾t mét phiªn lµm viÖc víi m¸y chñ, b¹n cã thÓ thùc hiÖn
2 lÖnh trªn nhiÒu lÇn trong mét dßng lµm viÖc nh−ng b¹n ph¶i cã
quyÒn Process.
Mét ý kiÕn hay tæng qu¸t trong viÖc g¸n quyÒn cho ng−êi dïng ®ã lµ chØ g¸n
nh÷ng quyÒn cÇn thiÕt cho ng−êi dïng mµ hä cÇn ®Ó hä thùc hiÖn nh÷ng
c«ng viÖc cña m×nh.
Mét sè chó ý ®èi víi ®Æc ®iÓm thùc hiÖn nh÷ng quyÒn sau:
• QuyÒn Grant cho phÐp ng−êi dïng cÊp nh÷ng mµ hä cã cho ng−êi
dïng kh¸c. Hai ng−êi sö dông cã c¸c quyÒn kh¸c nhau, víi quyÒn
Grant hä cã thÓ kÕt hîp nh÷ng quyÒn nµy.
• QuyÒn Alter cã thÓ ®−îc sö dông ®Ó ph¸ vì nh÷ng quyÒn b»ng viÖc
®æi tªn b¶ng.
• QuyÒn ®èi víi file cã thÓ bÞ l¹m dông ®Ó ®äc mét sè file trªn m¸y chñ
vµo b¶ng trong c¬ së d÷ liÖu, néi dung cña b¶ng nµy cã thÓ bÞ truy
nhËp b»ng c¸ch sö dông nh÷ng c©u lÖnh Select, ®iÒu nµy còng cã thÓ
®−îc thùc hiÖn ®èi víi mét sè c¬ së d÷ liÖu chÝnh cña m¸y chñ.
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
110
• QuyÒn Shutdown cã thÓ l¹m dông ®Ó tõ chèi mét sè dÞch vô ®èi víi
ng−êi sö dông kh¸c b»ng c¸ch t¾t m¸y chñ.
• QuyÒn process cã thÓ ®−îc sö dông ®Ó xem d¹ng v¨n b¶n thuÇn Text
cña nh÷ng c©u truy vÊn hiÖn thêi kÓ c¶ nh÷ng c©u truy vÊn ®Ó ®Æt l¹i
mËt khÈu
• QuyÒn ®èi víi nh÷ng c¬ së d÷ liÖu mysql cã thÓ bÞ sö dông ®Ó thay ®æi
password vµ mét sè quyÒn truy nhËp th«ng tin kh¸c,
Mét sè vÊn ®Ò mµ b¹n kh«ng thÓ thùc hiÖn ®èi víi hÖ thèng quuyÒn h¹n
trong Mysql
B¹n kh«ng thÓ chØ ra mét c¸ch râ rµng r»ng ng−êi sö dông kh«ng thÓ thùc
hiÖn ®−îc, nghÜa lµ b¹n kh«ng thÓ x¸c ®Þnh mét ng−êi dïng phï hîp vµ tõ
chèi viÖc kÕt nèi .
B¹n kh«ng thÓ chØ râ mét ng−êi dïng cã quyÒn t¹o vµ xo¸ c¸c b¶ng trong
mét c¬ sá d÷ liÖu, nh−ng kh«ng cã quyÒn t¹o vµ xo¸ chÝnh CSDL ®ã.
V. HÖ thèng quyÒn ho¹t ®éng nh− thÕ nµo
HÖ thèng quyÒn trong Mysql ®¶m b¶o mét c¸ch ch¾c ch¾n r»ng mäi
ng−êi dïng chØ ®−îc thùc hiÖn nh÷ng c«ng viÖc mµ hä ®−îc cho phÐp thùc
hiÖn. khi b¹n kÕt nèi víi m¸y chñ Mysql th× nh÷ng ®Æc tÝnh cña b¹n sÏ ®−îc
x¸c ®Þnh bëi m¸y chñ tõ chÝnh n¬i mµ b¹n kÕt nèi vµ tªn ng−êi dïng mµ b¹n
nhËp. hÖ thèng quyÒn sÏ theo nh÷ng ®Æc tÝnh cña b¹n vµ nh÷ng g× b¹n muèn
®Ó thùc hiÖn
Mysql xem xÐt c¶ hostname vµ username ®−îc b¹n chØ ra v× mét sè lÝ
do ®¬n gi¶n lµ tªn cÊp cho ng−êi dïng cung cÊp sÏ thuéc vÒ ng−êi ë mäi n¬i
trªn m¹ng. vÝ dô ng−êi dïng cã tªn lµ Bill kÕt nèi vµo Whitehouse.gov kh«ng
cÇn thiÕt ph¶i gièng ng−oiõ dïng Bill kÕt nèi vµo micrsoft.com. Mysql ®iÒu
khiÓn ®iÒu nµy b»ng c¸ch cho phÐp b¹n ph©n biÖt nhiÒu ng−êi dïng trong
nh÷ng m¸y chñ kh¸c nhau mµ cã cïng tªn gièng nhau, b¹n cã thÓ g¸n cho
ng−êi dïng cã tªn lµ Bill mét tËp hîp c¸c quyÒn ®Ó kÕt nèi vµo
Whitehouse.vµ mét tËp hîp c¸c quyÒn kh¸c ®Ó kÕt nèi vµo micrsoft.com
Mysql ®iÒu khiÓn truy nhËp bao gåm hai khung c¶nh kh¸c nhau
Khung c¶nh 1: m¸y chñ sÏ kiÓm tra b¹n cã quyÒn kÕt nèi hay kh«ng
Khung c¶nh 2: khi b¹n kÕt nèi víi m¸y chñ th× Mysql sÏ kiÓm tra nh÷ng yªu
cÇu mµ b¹n ®−a ra ®Ó xem b¹n cã ®ñ quyÒn h¹n ®Ó thùc hiÖn nã mét c¸ch
thÝch ®¸ng. vÝ dô nÕu b¹n ®· kÕt nèi vµo CSDL vµ cè g¾ng thùc hiÖn mét
lÖnh Select hoÆc xo¸ mét b¶ng cña CSDL th× Mysql sÏ kiÓm tra xem b¹n cã
quyÒn select hoÆc drop ®Ó thùc hiÖn ®iÒu ®ã hay khång .
Mysql dïng c¸c b¶ng USER,DB,HOST trong CSDL mysql ®Ó ®iÒu khiÓn
truy nhËp ë c¶ 2 khung c¶nh trªn, c¸c tr−¬ng trong c¸c b¶ng nµy ®−îc cung
cÊp d−íi ®©y:
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
111
Tªn b¶ng USER DB HOST
C¸c tr−êng ph¹m vi Host Host Host
User Data DB
Password User
C¸c tr−êng chØ quyÒn Select_Priv Select_Priv Select_Priv
Insert_Priv Insert_Priv Insert_Priv
Update_Priv Update_Priv Update_Priv
Delete_Priv Delete_Priv Delete_Priv
Index_Priv Index_Priv Index_Priv
Alter_Priv Alter_Priv Alter_Priv
Creat_Priv Creat_Priv Creat_Priv
Drop_Priv Drop_Priv Drop_Priv
Grant_Priv Grant_Priv Grant_Priv
References_Priv
Reload_Priv
Shutdown_Priv
Process_Priv
file_Priv
Mçi b¶ng ph©n quyÒn bao gåm tr−êng ph¹m vi vµ tr−êng quyÒn, tr−êng
ph¹m vi x¸c ®Þnh c¸c ph¹m vi c¸c môc trong b¶ng c¸c khung c¶nh lµ n¬i c¸c
mô ®ã khÐp vµo. vÝ dô trong b¶ng ng−êi dung môc HOST ,USER cã gi¸ trÞ
Lµ ‘vnuh.vnn.vn’vµ ‘thu’ dïng ®Ó nhËp ra sù kÕt nèi tíi m¸y chñ bëi ‘thu’kÕt
nèi tíi m¸y chñ ‘vnuh.vnn.vn’t−¬ng tù trong b¶ng DB môc HOST ,USER,
DB cã c¸c gi¸ trÞ lµ ‘vnuh.vnn.vn’vµ ‘thu’, ‘repost ’ dïng ®Ó nhËn ra sù kÕt
nèi bëi ‘thu’ kÕt nèi tíi m¸y chñ ‘vnuh.vnn.vn’, truy nhËp ®Õn CSDL
‘repost’ b¶ng table-priv,column-priv chøa tr−êng ph¹m vi ®Ó chØ ra c¸c b¶ng,
b¶ng / cét ®−îc kÕt hîp l¹i cho c¸c môc ®−îc yªu cÇu.
-§Ó thùc hiÖn chøc n¨ng kiÓm tra truy nhËp viÖc so s¸nh gi¸ trÞ cña Host th×
kh«ng ph©n biÖt ch÷ hoa ch÷ th−êng, gi¸ trÞ cña db, password vµ table_name
th× cã ph©n biÖt ch÷ hoa ch÷ th−êng, column_name kh«ng ph©n biÖt ch÷ hoa
ch÷ th−êng.
-Tr−êng trong quyÒn mçi b¶ng chØ ra c¸c quyÒn ®−îc g¸n bëi c¸c thùc thÓ
b¶ng ®ã lµ c¸c thao t¸c cã thÓ cho phÐp thùc hiÖn. Tr−êng ph¹m vi cã kiÓu
x©u ®−îc khai b¸o nh− tr−íc ®©y, gi¸ trÞ mÆc ®Þnh cho mçi tr−êng lµ rçng.
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
112
Tªn tr−êng KiÓu tr−êng
Host CHAR(60)
User CHAR(16)
Password CHAR(16)
Db CHAR(64)
Table_name CHAR(60)
Column_name CHAR(60)
Trong tÊt c¶ c¸c b¶ng uer, host, db tÊt c¶ c¸c tr−êng ®Òu khai b¸o lµ
Enum(‘N’,’Y’), gi¸ trÞ mÆc ®Þnh cho mçi tr−êng lµ ‘N’
-Trong c¸c b¶ng table_priv, column_priv c¸c tr−êng ®Òu ®−îc g¸n kiÓu tËp
hîp.
§Æc ®iÓm vÒ quyÒn trong c¸c b¶ng cña CSDL Mysql
-B¶ng user:
Tr−êng ph¹m vi trong b¶ng user x¸c ®Þnh xem b¹n cã ®−îc phÐp thùc hiÖn
hoÆc kh«ng ®−îc phÐp thùc hiÖn kÕt nèi bÊt kú mét quyÒn nµo ®−îc g¸n
trong b¶ng user th× tÊt c¶ c¸c quyÒn nµo lµ toµn côc trong mysql, nghÜa lµ c¸c
quyÒn nµy sÏ cã hiÖu lùc ®èi víi tÊt c¶ CSDL trªn server
-B¶ng db vµ b¶ng host ®−îc sö dông kÕt hîp víi nhau:
Tr−êng ph¹m vi trong b¶ng db x¸c ®Þnh nh÷ng ng−êi dïng nµo ®−îc phÐp
truy cËp ®Õn CSDL nµo, m¸y chñ nµo, tr−êng quyÒn sÏ chØ ra c¸c thao t¸c
nµo sÏ ®−îc cho phÐp thùc hiÖn.
B¶ng host ®−îc sö dông nh− mét sù më réng cña b¶ng db khi b¹n muèn trao
cho c¸c thùc thÓ trong b¶ng db cã quyÒn ®èi víi nhiÒu host. VÝ dô, b¹n muèn
mét ng−êi dïng trong b¶ng db cã thÓ sö dông mét CSDL tõ nhiÒu m¸y chñ
kh¸c nhau.
B¶ng table_priv, column_priv còng t−¬ng tù nh− b¶ng db nh−ng nã cã qu¶n
lý mét c¸ch chi tiÕt h¬n, c¸c quyÒn sÏ ®ùoc g¸n t¹i nhiÒu møc kh¸c nhau cho
c¸c b¶ng, cét trong CSDL.
Chó ý: C¸c quyÒn phôc vô cho c«ng t¸c qu¶n trÞ chØ ®−îc chØ ra trong b¶ng
user bëi v× mét lý do ®¬n gi¶n lµ c¸c quyÒn nµy chØ thao t¸c víi m¸y chñ nªn
kh«ng cã lý do g× ®−a nã vµo trong b¶ng ph©n quyÒn kh¸c.
VI. §iÒu khiÓn truy nhËp
1. §iÒu khiÓn truy nhËp
Khung c¶nh mét (Stage 1) thÈm tra kÕt nèi thuËn hoÆc tõ chèi viÖc kÕt nèi
cña b¹n dùa trªn c¸c ®Æc tÝnh cña b¹n vµ thÈm tra l¹i ®iÒu nµy b»ng c¸ch b¹n
ph¶i cung cÊp mét mËt khÈu dóng. NÕu kh«ng nã sÏ tõ chèi viÖc kÕt nèi cña
b¹n, nÕu thµnh c«ng nã sÏ chuyÓn sang khung c¶nh thø hai (Stage 2).
ViÖc x¸c ®Þnh nh÷ng ®Æc tÝnh cña b¹n dùa trªn hai th«ng tin c¬ b¶n:
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
113
- Tªn m¸y chñ mµ b¹n muèn kÕt nèi
- Tªn ng−êi dïng
ViÖc kiÓm tra sÏ thùc hiÖn trªn ba tr−êng ph¹m vi trong b¶ng user ®ã lµ host,
user vµ password m¸y chñ chi chÊp nhËn viÖc kÕt nèi cña b¹n khi mµ c¸c
thùc thÓ trong b¶ng user phï hîp víi host, user vµ b¹n ph¶i cung cÊp
password ®óng.
2. §iÒu khiÓn truy nhËp
Khung c¶nh 2(Stage 2) x¸c minh yªu cÇu khi viÖc kÕt nèi cña b¹n ®· thµnh
c«ng mysql server sÏ chuyÓn sang khung c¶nh 2, ®èi víi mçi yªu cÇu cña
mçi kÕt nèi mysql server sÏ thÈm tra xem b¹n cã ®ñ quyÒn h¹n ®Ó thùc hiÖn
c¸c quyÒn h¹n ®ã hay kh«ng dùa trªn c¸c lo¹i thao t¸c mµ b¹n muèn thùc
hiÖn viÖc thÈm tra sÏ ®ùoc thùc hiÖn ®èi víi c¸c tr−êng quyÒn trong c¸c b¶ng
ph©n quyÒn, user, host, db. TÊt c¶ c¸c quyÒn ®ùoc cÊp trong b¶ng user sÏ
®ùoc Ên ®Þnh lµ toµn côc cho tÊt c¶ c¸c CSDL nãi c¸ch kh¸c tÊt c¶ c¸c quyÒn
®−íc cÊp trong b¶ng user lµ superuser.
V× vËy mµ b¹n chØ nªn cÊp quyÒn trong b¶ng user cho nh÷ng ng−êi dïng nh−
ng−êi qu¶n trÞ m¸y chñ hoÆc ng−êi qu¶n trÞ CSDL.
VII. Khi nµo viÖc thay ®æi quyÒn h¹n cã hiÖu lùc
Khi mysql khëi ®éng th× néi dung cña tÊt c¶ c¸c b¶ng ph©n quyÒn ®ùoc ®Æt
vµo bé nhí vµ khi ®ã nã sÏ cã hiÖu lùc.
ViÖc b¹n thay ®æi tÊt c¶ c¸c b¶ng ph©n quyÒn sö dông lÖnh GRANT
(Revoke) hoÆc ®Æt l¹i mËt khÈu sÏ ®ùoc m¸y chñ chó ý ngay lËp tøc.
NÕu b¹n thùc hiÖn viÖc thay ®æi c¸c b¶ng ph©n quyÒn mét c¸ch thñ c«ng nh−
lµ sö dông lÖnh INSERT, UPDATE,… th× b¹n nªn dïng lÖnh flush priviliges
hoÆc ch¹y mysqladmin flush priviliges hoÆc mysqladmin reload ®Ó th«ng
b¸o cho server biÕt ®Ó reload c¸c b¶ng ph©n quyÒn.
Khi server th«ng b¸o mét chó ý r»ng c¸c b¶ng ph©n quyÒn ®· bÞ thay ®æi th×
c¸c kÕt nèi ®ang tån t¹i ë phÝa client sÏ bÞ thay ®æi nh− sau:
-C¸c thay ®æi ®èi víi c¸c b¶ng, cét sÏ cã hiÖu lùc ®èi víi c¸c yªu cÇu tiÕp
theo ë phÝa client.
-C¸c thay ®æi vÒ quyÒn ®èi víi CSDL sÏ cã hiÖu lùc ®èi víi c©u lÖnh
userdb_name tiÕp theo.
®èi víi c¸c quyÒn toµn côc viÖc thay ®æi password sÏ cã hiÖu lùc ë lÇn kÕt
nèi tiÕp theo.
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
114
VIII. Cµi ®Æt viÖc khëi t¹o hÖ thèng quyÒn trong mysql
-Sau khi cµi ®Æt mysql b¹n cã thÓ ®Æt viÖc khëi t¹o c¸c quyÒn cho mysql
b»ng viÖc ch¹y scripts/mysql_install_db. KÞch b¶n nµy sÏ ch¹y mysqlserver
®Ó khëi c¸c quyÒn bao gåm mét tËp hîp c¸c quyÒn sau:
§èi víi ng−êi dïng root sÏ ®ùoc t¹o nh− mét superuser nªn nã cã thÓ lµm
mäi thø, viÖc kÕt nèi ph¶i ®ùoc thùc hiÖn ë localhost.
Chó ý: Ban ®Çu viÖc khëi t¹o sÏ kh«ng yªu cÇu mËt khÈu ®èi víi ng−êi dïng
root v× vËy bÊt cø ng−êi nµo còng cã thÓ kÕt nèi nh− mét ng−êi dïng root mµ
kh«ng bÞ ®ßi hái password do ®ã viÖc ®Çu tiªm mµ b¹n nªn lµm lµ thay ®æi
password cho ng−êi dïng root.
- BÊt cø mét ng−êi dïng nµo ®−îc t¹o còng cã thÓ lµm mäi thøc ®èi víi
CSDL test nh−ng viÖc kÕt nèi ph¶i ®ùoc thùc hiÖn ë localhost.
IX. G¸n thªm quyÒn ng−êi dïng ®èi víi mysql
B¹n cã thÓ t¹o mét ng−êi dïng míi b»ng hai c¸ch: Dïng lÖnh Grant hoÆc
thao t¸c trùc tiÕp trªn CSDL mysql. C¸ch thøc th−êng ®ùoc dïng h¬n c¶ lµ
dïng lÖnh grant bëi v× nã ng¾n gän vµ Ýt lçi h¬n.
C¸c vÝ dô sau sÏ thùc hiÖn viÖc t¹o mét ng−êi dïng míi. §Ó thùc hiÖn ®iÒu
nµy th× b¹n ph¶i kÕt nèi víi mysql nh− mét ng−êi dïng root vµ ng−êi dïng
root nµy ph¶i ®−îc g¸n quyÒn insert ®èi víi CSDL mysql vµ ph¶i cã quyÒn
qu¶n trÞ reload
Mysql> GRANT ALL PRIVILEGES ON *.* TO monty@localhost
IDENTIFIED BY ‘some_pass’ WITH GRANT OPTION;
Mysql> GRANT ALL PRIVILEGES ON *.* TO monty@”%”
IDENTIFIED BY ‘some_pass’ WITH GRANT OPTION;
Mysql> GRANT RELOAD, PROCESS ON *.* TO admin@localhost;
Mysql> GRANT USAGE ON *.* TO dummy@localhost;
C¸c c©u lÖnh trªn g¸n quyÒn cho ban ng−êi dïng monty, admin vµ dummy.
- ng−êi dïng monty: §©y lµ ng−êi dïng superuser víi ®Çy ®ñ c¸c quyÒn cã
thÓ kÕt nèi bÊt cø n¬i ®©u nh−ng ph¶i cã password lµ “some_pass”.
- Ng−êi dïng admin: ng−êi dïng nµy ®−îc quyÒn reload, process nh−ng
ph¶i ®¨ng nhËp tõ localhost vµ kh«ng yªu cÇu password
- Ng−êi dïng dummy cã thÓ kÕt nèi mµ kh«ng cÇn password nh−ng kh«ng
®ùoc g¸n quyÒn g× c¶.
- Còng thùc hiÖn viÖc g¸n quyÒn nh− trªn theo c¸ch kh¸c ta cã thÓ lµm nh−
sau:
Mysql> INSERT INTO user
VALUES(‘localhost’,’monty’,PASSWORD(‘some_pass’),
‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’)
Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL
115
Mysql> INSERT INTO user
VALUES(‘%’,’monty’,PASSWORD(‘some_pass’),
‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’)
Mysql> INSERT INTO user SET Host=’localhost’, User=’admin’,
Reload_priv=’Y’, Process_priv=’Y’;
Mysql> INSERT INTO user (Host, User, Password)
VALUES(‘localhost’,’dummy’,’’);
Mysql> FLUSH PRIVILEGES;

More Related Content

PDF
Tai lieu-laptrinh ph-pvamysql
PDF
Lap trinh php va my sql
PDF
Lap Trinh Php Va My Sql
PDF
Haiphongit.com.tai lieu-laptrinh ph-pvamysql
PDF
Tai lieu-laptrinh ph-pvamysql - bachkhoaaptech.com
PDF
Hướng Dẫn Php-3
PDF
Giao trinh html
PDF
Giáo trình thiết kế web
Tai lieu-laptrinh ph-pvamysql
Lap trinh php va my sql
Lap Trinh Php Va My Sql
Haiphongit.com.tai lieu-laptrinh ph-pvamysql
Tai lieu-laptrinh ph-pvamysql - bachkhoaaptech.com
Hướng Dẫn Php-3
Giao trinh html
Giáo trình thiết kế web

Similar to Lap trinh PHP va MySQL (tài liệu tham khảo)) (20)

PDF
Giáo trình thiết kế web
PDF
Giao trinh java_script[1]
PPT
Tim hieu ve lo hong web va cach phong chong
PDF
Chuong07 php
PDF
Giao trinh thiet_ke_web html
PDF
Giao trinh html
PPT
Bao thuc tap tot nghiep vo minh truong 10299191
DOC
Giao Trinh Thiet Ke Web
PDF
Lap trinh web dong voi php my sql
PDF
Lap trinh web dong voi php my sql
PDF
bctntlvn (52).pdf
DOC
Tìm hiểu một số công nghệ web và xây dựng một chương trình newsletter
PDF
Os php-5.3new1
PDF
graphic in C.pdf
PDF
PHP có thể làm gì? 9 Thứ thú vị có thể làm với PHP
PDF
Tu hoc matlab
PDF
Bai th08 php voi csdl
PPT
Chuong06
 
PDF
Hướng Dẫn Php
PDF
Thiet ke va lap trinh web
Giáo trình thiết kế web
Giao trinh java_script[1]
Tim hieu ve lo hong web va cach phong chong
Chuong07 php
Giao trinh thiet_ke_web html
Giao trinh html
Bao thuc tap tot nghiep vo minh truong 10299191
Giao Trinh Thiet Ke Web
Lap trinh web dong voi php my sql
Lap trinh web dong voi php my sql
bctntlvn (52).pdf
Tìm hiểu một số công nghệ web và xây dựng một chương trình newsletter
Os php-5.3new1
graphic in C.pdf
PHP có thể làm gì? 9 Thứ thú vị có thể làm với PHP
Tu hoc matlab
Bai th08 php voi csdl
Chuong06
 
Hướng Dẫn Php
Thiet ke va lap trinh web
Ad

Recently uploaded (20)

DOCX
Bài tập trăc nghiệm vận tốc. tốc độ trong chuyển động thẳng
PPTX
Powerpoint cho Ke toan tai chinh KET307_Bai1_SV.pptx
PDF
Vision - Language - Model-- - Ebook.pdf
PPTX
SLIDE BV CHÍNH THỨC LATSKH - note.pptx
PPT
BÀi giảng phương pháp luận nghiên cứu khoa học.ppt
DOCX
BÀI TIỂU LUẬN HẾT HỌC PHẦN TỔ CHỨC HOẠT ĐỘNG TRẢI NGHIỆM,HƯỚNG NGHIỆP Ở TRƯỜN...
PPT
ky nang thuyet trinh va trinh bay hieu qua.ppt
PPTX
TIẾT 11. BÀI 32 DINH DƯỠNG VÀ TIÊU HÓA Ở NGƯỜI.pptx
PDF
BÀI TẬP BỔ TRỢ FRIENDS PLUS 9 - BÀI TẬP TRẮC NGHIỆM, TỰ LUẬN - CẢ NĂM (BÁM SÁ...
PDF
BÀI TẬP BỔ TRỢ 4 KỸ NĂNG TIẾNG ANH 8 GLOBAL SUCCESS - CẢ NĂM - BÁM SÁT FORM Đ...
DOCX
2024-2025 HSG HÓA 12 CỤM LẦN 3 - Hải Dương - đề.docx
DOCX
Luận văn group-Bài tiểu luận Ý thức - Giấc mơ.docx
PDF
Quản trị sự kiện........................
PPTX
Bộ Giáo Trình Chuẩn YCT 2 12 --第十二YCT2课.pptx
DOCX
Set menu 3 món rất hay và hiện đại dành cho người
PPTX
Bài giảng chương 3 phương pháp luận nghiên cứu khoa học_HQH.pptx
PPT
Bài giảng Power Point 2003, hướng dẫn học tập
PPTX
Phân bố Nhị Thức Chuyên Đề Toán Lớp 12 Chân trời sáng tạo Tập 2
PPTX
Tốc độ và vận tốc trong chuyển động thẳng
PPTX
Bài giảng Quần thể sinh vật Sinh học lớp 8
Bài tập trăc nghiệm vận tốc. tốc độ trong chuyển động thẳng
Powerpoint cho Ke toan tai chinh KET307_Bai1_SV.pptx
Vision - Language - Model-- - Ebook.pdf
SLIDE BV CHÍNH THỨC LATSKH - note.pptx
BÀi giảng phương pháp luận nghiên cứu khoa học.ppt
BÀI TIỂU LUẬN HẾT HỌC PHẦN TỔ CHỨC HOẠT ĐỘNG TRẢI NGHIỆM,HƯỚNG NGHIỆP Ở TRƯỜN...
ky nang thuyet trinh va trinh bay hieu qua.ppt
TIẾT 11. BÀI 32 DINH DƯỠNG VÀ TIÊU HÓA Ở NGƯỜI.pptx
BÀI TẬP BỔ TRỢ FRIENDS PLUS 9 - BÀI TẬP TRẮC NGHIỆM, TỰ LUẬN - CẢ NĂM (BÁM SÁ...
BÀI TẬP BỔ TRỢ 4 KỸ NĂNG TIẾNG ANH 8 GLOBAL SUCCESS - CẢ NĂM - BÁM SÁT FORM Đ...
2024-2025 HSG HÓA 12 CỤM LẦN 3 - Hải Dương - đề.docx
Luận văn group-Bài tiểu luận Ý thức - Giấc mơ.docx
Quản trị sự kiện........................
Bộ Giáo Trình Chuẩn YCT 2 12 --第十二YCT2课.pptx
Set menu 3 món rất hay và hiện đại dành cho người
Bài giảng chương 3 phương pháp luận nghiên cứu khoa học_HQH.pptx
Bài giảng Power Point 2003, hướng dẫn học tập
Phân bố Nhị Thức Chuyên Đề Toán Lớp 12 Chân trời sáng tạo Tập 2
Tốc độ và vận tốc trong chuyển động thẳng
Bài giảng Quần thể sinh vật Sinh học lớp 8
Ad

Lap trinh PHP va MySQL (tài liệu tham khảo))

  • 1. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 1 Ban chØ ®¹o c«ng nghÖ th«ng tin cña c¬ quan ®¶ng *** TµI liÖu tham kh¶o Ng«n ng÷ lËp tr×nh pHP Hµ néi, 2003
  • 2. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 2 PhÇn I : Giíi thiÖu ng«n ng÷ lËp tr×nh PHP ch−¬ng i : Ng«n ng÷ lËp tr×nh pHP I. Giíi thiÖu PHP vµ m«i tr−êng lËp tr×nh web. 1. PHP lµ g× ? C¸i tªn PHP ban ®Çu ®−îc viÕt t¾t bëi côm tõ Personal Home Page, vµ ®−îc ph¸t triÓn tõ n¨m 1994 bëi Rasmus Lerdorf. Lóc ®Çu chØ lµ mét bé ®Æc t¶ Perl, ®−îc sö dông ®Ó l−u dÊu vÕt ng−êi dïng trªn c¸c trang web. Sau ®ã, Rasmus Lerdorf ®· ph¸t triÓn PHP nh− lµ mét m¸y ®Æc t¶ (Scripting engine). Vµo gi÷a n¨m 1997, PHP ®· ®−îc ph¸t triÓn nhanh chãng trong sù yªu thÝch cña nhiÒu ng−êi. PHP ®· kh«ng cßn lµ mét dù ¸n c¸ nh©n cña Rasmus Lerdorf vµ ®· trë thµnh mét c«ng nghÖ web quan träng. Zeev Suraski vµ Andi Gutmans ®· hoµn thiÖn viÖc ph©n tÝch có ph¸p cho ng«n ng÷ ®Ó råi th¸ng 6 n¨m 1998, PHP3 ®· ra ®êi (phiªn b¶n nµy cã phÇn më réng lµ *.php3). Cho ®Õn tËn thêi ®iÓm ®ã, PHP ch−a mét lÇn ®−îc ph¸t triÓn chÝnh thøc, mét yªu cÇu viÕt l¹i bé ®Æc t¶ ®−îc ®−a ra, ngay sau ®ã PHP4 ra ®êi (phiªn b¶n nµy cã phÇn më réng kh«ng ph¶i lµ *.php4 mµ lµ *.php). PHP4 nhanh h¬n so víi PHP3 rÊt nhiÒu. PHP b©y giê ®−îc gäi lµ PHP Hypertext PreProcesor. 2. T¹i sao ph¶i sö dông PHP Nh− chóng ta ®· biÕt, cã rÊt nhiÒu trang web ®−îc x©y dùng bëi ng«n ng÷ HTML (HyperText Markup Language). §©y chØ lµ nh÷ng trang web tÜnh, nghÜa lµ chóng chØ chøa ®ùng mét néi dung cô thÓ víi nh÷ng dßng v¨n b¶n ®¬n thuÇn, h×nh ¶nh ,vµ cã thÓ ®−îc sù hç trî bëi ng«n ng÷ JavaScript, hoÆc Java Apple. Nh÷ng trang web nh− vËy ng−êi ta th−êng gäi lµ client- side. Tuy nhiªn, Internet vµ Intranets ®· ®−îc sö dông cho c¸c øng dông cÇn tíi c¬ së d÷ liÖu. C¸c trang øng dông nh− vËy ®−îc gäi lµ trang web ®éng, bëi v× néi dung cña chóng lu«n thay ®æi tïy thuéc vµo d÷ liÖu vµ ng−êi sö dông. PHP lµ ng«n ng÷ lµm ®−îc nh÷ng ®iÒu nh− vËy. B»ng c¸ch ch¹y ch−¬ng tr×nh PHP trªn m¸y chñ Web server, b¹n cã thÓ t¹o ra c¸c øng dông
  • 3. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 3 cã sù t−¬ng t¸c víi c¬ së d÷ liÖu ®Ó t¹o ra nh÷ng trang web vµ ®©y ®−îc gäi lµ trang web ®éng. Chóng ta h·y xem xÐt c¸ch ho¹t ®éng cña trang web ®−îc viÕt b»ng ng«n ng÷ HTML vµ PHP nh− thÕ nµo. Víi c¸c trang HTML : Khi cã yªu cÇu tíi mét trang web tõ phÝa ng−êi sö dông (browser). Web server thùc hiÖu ba b−íc sau : + §äc yªu cÇu tõ phÝa browser, + T×m trang web trªn server. + Göi trang web ®ã trë l¹i cho browser (nÕu t×m thÊy) qua m¹ng Internet hoÆc Intranet . Víi c¸c trang PHP : Kh¸c víi c¸c trang HTML, khi mét trang PHP ®−îc yªu cÇu, web server ph©n tÝch vµ thi hµnh c¸c ®o¹n m· PHP ®Ó t¹o ra trang HTML. §iÒu ®ã ®−îc thÓ hiÖn b»ng bèn b−íc sau : + §äc yªu cÇu tö phÝa browser. + T×m trang web trªn server. + Thùc hiÖn c¸c ®o¹n m· PHP trªn trang web ®ã ®Ó söa ®æi néi dung cña trang. + Göi trë l¹i néi dung cho browser (®©y lµ trang HTML cã thÓ hiÓn thÞ ®−îc bëi tr×nh duyÖt Internet Explorer hoÆc tr×nh duyÖt nµo ®ã). Tãm l¹i, sù kh¸c nhau gi÷a HTML vµ PHP lµ HTML kh«ng ®−îc thùc hiÖn trªn m¸y chñ Web server cßn c¸c trang *.php viÕt b»ng c¸c ®o¹n m· PHP ®−îc thùc hiÖn trªn m¸y chñ Web server do ®ã nã linh ®éng vµ mÒm dÎo h¬n . Trang html Web server + Đọc yêu cầu từ browser + Tìm file.htm trên server + Gửi lại cả file.htm cho browser Request http://domain/file.htm Web server + Đọc yêu cầu từ browser + Tìm trang web(file.php) trên server + Thực hiện các đoạn mã PHP + Gửi trả lại nội dung cho browser Request http://domain/file.php Kết xuất
  • 4. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 4 3. Nh÷ng ®iÓm m¹nh cña PHP -PHP thùc hiÖn víi tèc ®é rÊt nhanh vµ hiÖu qu¶ .Mét Server b×nh th−êng cã thÓ ®¸p øng ®−îc hµng triÖu truy cËp tíi trong mét ngµy. PHP hç trî kÕt nèi tíi rÊt nhiÒu hÖ CSDL kh¸c nhau: PostgreSQL,mSQL,Oracle, dbm, filePro ,Hyperware, informix,InterBase, Sybase, ... Ngoµi ra cßn hç trî kÕt nèi víi ODBC th«ng qua ®ã cã thÓ kÕt nèi víi nhiÒu ng«n ng÷ kh¸c mµ ODBC hç trî. -PHP cung cÊp mét hÖ thèng th− viÖn phong phó : Do PHP ngay tõ ®Çu ®−îc thiÕt kÕ nh»m môc ®Ých x©y dùng vµ ph¸t triÓn c¸c øng dông trªn web nªn PHP cung cÊp rÊt nhiÒu hµm x©y dùng s½n gióp thùc hiÖn c¸c c«ng viÖc rÊt dÔ dµng : göi, nhËn mail ,lµm viÖc víi c¸c cookie, vµ nhiÒu thø kh¸c n÷a . -PHP lµ mét ng«n ng÷ rÊt dÔ dïng, dÔ häc vµ ®¬n gi¶n h¬n nhiÒu so víi c¸c ng«n ng÷ kh¸c nh− Perl, Java. NÕu b¹n ®· biÕt ng«n ng÷ C th× mäi viÖc sÏ hoµn toµn thuËn lîi . -PHP cã thÓ sö dông ®−îc trªn nhiÒu hÖ ®iÒu hµnh, chóng ta cã thÓ viÕt chóng trªn Unix, Lunix vµ c¸c phiªn b¶n cña Windows. Vµ cã thÓ ®em m· PHP nµy ch¹y trªn c¸c hÖ ®iÒu hµnh kh¸c mµ kh«ng ph¶i söa ®æi l¹i m·. -PHP lµ ng«n ng÷ m· nguån më. II. BiÕn, h»ng sè vµ kiÓu d÷ liÖu trong PHP. 1. KiÓu d÷ liªu . PHP cã ba kiÓu d÷ liÖu c¬ b¶n : interger, double vµ string. Ngoµi ra cßn cã c¸c kiÓu d÷ liÖu kh¸c (nh−ng kh«ng ph¶i c¸c kiÓu d÷ liÖu c¬ b¶n) nh− arrays (c¸c kiÓu d÷ liÖu m¶ng), objects (c¸c kiÓu d÷ liÖu ®èi t−îng). Interger lµ kiÓu chiÕm 4 byte bé nhí ,gi¸ trÞ cña nã trong kho¶ng –2 tû tíi + 2 tû. KiÓu Double lµ kiÓu sè thùc ,ph¹m vi biÓu diÔn ± (10-308 ÷ 10308 ). KiÓu string dïng ®Ó chøa c¸c gi¸ trÞ bao gåm c¸c ký tù vµ con sè . VÝ dô : 2 // ®©y lµ kiÓu interger 1.0 // ®©y lµ kiÓu double “2” // ®©y lµ kiÓu string
  • 5. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 5 “2 hours” // ®©y lµ mét kiÓu string kh¸c 2. H»ng sè H»ng sè lµ nh÷ng gi¸ trÞ kh«ng ®æi. Chóng ta th−êng dïng h»ng sè ®Ó l−u c¸c gi¸ trÞ kh«ng ®æi trong suèt ch−¬ng tr×nh nh− : nhiÖt ®é (00 C), c¸c gi¸ trÞ thêi gian chØ sù chuyÓn giao gi÷a s¸ng ,ch−a ,chiÒu ,tèi ... a. Khai b¸o h»ng sè : Ta dïng hµm define() ®Ó khai b¸o h»ng sè : define(“COMPANY”, “Phop’s Bicycles”); define(“YELLOW”, “#FFFF00”); define(“VERSION”, 4); define(“NL”, “<BR>n”); Trong vÝ dô trªn chóng ta ®· dïng hµm define() ®Ó khai b¸o h»ng sè NL. H»ng sè nµy lµ mét thÎ ng¾t dßng trong HTML. Chóng ta sÏ sö dông c¸c h»ng sè trong PHP nh− sau : echo (“Employment at ”. COMPANY. NL); C¸ch viÕt trªn còng gièng nh− c¸c viÕt sau: echo (“Employment at Phop’s Bicycles<BR>n”); Chó ý : h»ng sè ph¶i ë ngoµi hai dÊu “ vµ ”. Trêng hîp sau lµ kh«ng cã hiÖu lùc : echo (“Employment at COMPANY NL”);. Khi thùc hiÖn nã sÏ cho kÕt qu¶ lµ : “Employment at COMPANY NL”. Hµm defined() : hµm nµy dïng ®Ó kiÓm tra xem mét h»ng sè nµo ®ã ®· ®−îc khai b¸o ch−a. VÝ dô : if ( defined (“YELLOW”)) { echo (“<BODY BGCOLOR=”. YELLOW. “>n”); }
  • 6. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 6 b. C¸c h»ng sè ®· ®−îc ®Þnh nghÜa trong PHP (Built-in Constants): §Ó hç trî cho ng−êi lËp tr×nh, PHP cung cÊp s½n c¸c h»ng sè nh− : c¸c biÕn m«i trêng, c¸c biÕn cña Web server Apache ... Ngêi lËp tr×nh cã thÓ sö dông hµm phpinfo() ®Ó xem c¸c gi¸ trÞ nµy. <HTML> <!—phpinfo() --> <BODY> <?php phpinfo(); ?> </BOCY> </HTML> + H»ng sè nguyªn : ®©y lµ nh÷ng gi¸ trÞ cã kiÓu integer. VÝ dô : 10 + H»ng sè thùc: ®©y lµ nh÷ng gi¸ trÞ cã kiÓu double. VÝ dô : 10.00 + H¾ng ký tù : ®©y lµ mét x©u ký tù ®Æt trong dÊu ngoÆc ®¬n hoÆc kÐp. VÝ dô : “Ng«n ng÷ lËp tr×nh PHP”.
  • 7. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 7 3. BiÕn vµ gi¸ trÞ logic. + Còng gièng víi C/C++, PHP kh«ng cã kh¸i niÖm TRUE vµ FALSE. C¸c gi¸ trÞ TRUE ®−îc hiÓu lµ nh÷ng gi¸ trÞ b»ng 1 vµ gi¸ trÞ FALSE lµ nh÷ng gi¸ trÞ b»ng 0 hoÆc x©u rçng . + Khi sö dông biÕn chóng ta kh«ng cÇn khai b¸o kiÓu . VÝ dô : $a = 1; // $a lµ mét biÕn kiÓu integer. $a = 1.2; // b©y giê $a lµ mét biÕn kiÓu double. $a = “A” ; // b©y giê $a l¹i lµ mét biÕn kiÓu string. + NÕu nh− thùc hiÖn phÐp to¸n gi÷a biÕn cã kiÓu sè vµ kiÓu string, PHP sÏ coi chuçi lµ mét d·y sè nh− sau : $str = “222B Baker Street”; Ta thÊy biÕn $str cã gi¸ trÞ kiÓu string, vµ nÕu céng sè 3 víi gi¸ trÞ nµy th× : $x = 3 + $str ; // $x = 225 khi ®ã biÕn $x nhËn ®−îc gi¸ trÞ 255 v× PHP ®· céng 3 víi ba sè ®Çu. Nhng nÕu ta in gi¸ trÞ cña biÕn $str th× echo ($str); // print : “222B Baker Street” Chó ý r»ng c¸c phÐp to¸n gi÷a sè vµ chuçi chØ ®óng khi ký tù ®Çu cña chuçi lµ sè . + Ta còng cã thÓ lµm thay ®æi kiÓu gi¸ trÞ cña mét biÕn b»ng c¸ch Ðp kiÓu $a = 11.2; // biÕn $a cã kiÓu double $a = (int) $a; // b©y giê $a cã kiÓu integer ,gi¸ trÞ lµ 11 $a = (double) $a; // b©y giê $a l¹i cã kiÓu double, gi¸ trÞ lµ 11.0 $b = (string) $a ; // biÕn $b cã kiÓu string ,gi¸ trÞ lµ “11” Còng ph¶i biÕt r»ng PHP tù ®éng chuyÓn ®æi kiÓu rÊt tèt. NÕu thËt sù cÇn thiÕt chóng ta míi ph¶i dïng c¸ch trªn.
  • 8. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 8 + C¸c hµm lµm viÖc víi biÕn gettype() : hµm nµy tr¶ l¹i kiÓu cña mét biÕn nµo ®ã. Gi¸ trÞ tr¶ vÒ cã thÓ lµ : “integer” “double” “string” “array” “object” “class” “unknown type” vÝ dô : if (gettype($user_input) == “integer”) { $age = $user_input; } settype() : hµm nµy Ðp kiÓu cho mét biÕn nµo ®ã. NÕu thµnh c«ng hµm tr¶ vÒ gi¸ trÞ 1 (true) ,ng−îc l¹i lµ 0 (false). vÝ du : $a = 7.5; settype($a, “integer”); if (settype($a, “array”)){ echo (“Conversion succeeded. ”); }else{ echo (“Conversion error. ”); } isset() vµ unset() : Hµm isset() kiÓm tra mét biÕn ®· ®−îc g¸n gi¸ trÞ hay ch−a, hµm unset() sÏ gi¶i phãng bé nhí cho mét biÕn nµo ®ã . vÝ dô :
  • 9. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 9 $id = “323bb”; if (isset($id)) { echo (“D÷ liÖu ®· ®−îc g¸n”); }else{ echo (“D÷ liÖu ch−a ®−îc g¸n”); } unset($id); if(!isset($id)) { echo (“D÷ liÖu ®· ®−îc gi¶i phãng”); } empty() : Còng gièng hµm isset(), hµm empty() sÏ tr¶ vÒ gi¸ trÞ 1 (true) nÕu mét biÕn lµ rçng vµ ng−îc l¹i 0 (false). §èi víi biÕn cã kiÓu sè gi¸ trÞ b»ng 0 ®−îc coi lµ rçng, biÕn kiÓu string ®−îc coi lµ rçng nÕu x©u lµ x©u rçng. vÝ dô: echo empty($new) ; // true $new = 1; echo empty($new); // false $new = “”; echo empty($new); // true $new = 0; echo empty($new); // true $new = “So 323”; echo empty($new); // false unset($new); echo empty($new); // true
  • 10. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 10 III. C¸c to¸n tö + B¶ng c¸c phÐp to¸n sè häc PhÐp to¸n ý nghÜa VÝ dô Gi¶i thÝch + - * / % PhÐp céng PhÐp trõ PhÐp nh©n PhÐp chia Chia d 7 + 2 7 – 2 7 * 2 7 / 2 7 % 2 Thùc hiÖn phÐp céng gi÷a 7 vµ 2 : 9 Thùc hiÖn phÐp trõ gi÷a 7 vµ 2 : 5 Thùc hiÖn phÐp nh©n gi÷a 7 vµ 2 : 14 Thùc hiÖn phÐp chia gi÷a 7 vµ 2 : 3.5 Thùc hiÖn phÐp chia d gi÷a 7 vµ 2 : 1 Ta cã thÓ viÕt c¸c phÐp to¸n ng¾n gän nh− b¶ng sau : Khi viÕt T−¬ng ®−¬ng víi $h += $i $h -= $i $h *= $i $h /= $i $h %= $i $h = $h + $i $h = $h - $i $h = $h * $i $h = $h / $i $h = $h % $i + PhÐp g¸n : vÝ dô : $x = 1; $y = $x + 1; $length = $area / $width;
  • 11. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 11 + B¶ng c¸c phÐp to¸n quan hÖ PhÐp to¸n ý nghÜa VÝ dô Gi¶i thich == < > <= >= != <> So s¸nh b»ng So s¸nh nhá h¬n So s¸nh lín h¬n Nhá h¬n hoÆc b»ng Lín h¬n hoÆc b»ng So s¸nh kh¸c So s¸nh kh¸c $h == $i $h < $i $h > $i $h <= $i $h => $i $h != $i $h <> $i KiÓm tra $h vµ $i cã b»ng nhau kh«ng KiÓm tra $h cã nhá h¬n $i kh«ng KiÓm tra $h cã lín h¬n $i kh«ng KiÓm tra $h cã nhë h¬n hoÆc b»ng $i KiÓm tra $h cã lín h¬n hoÆc b»ng $i KiÓm tra $h cã kh¸c $i kh«ng KiÓm tra $h cã kh¸c $i kh«ng C¸c phÐp so s¸nh th−êng dïng kiÓm tra ®iÒu kiÖn trong c¸c c©u lÖnh ®iÒu khiÓn mµ ta sÏ häc ë bµi sau . + B¶ng c¸c phÐp to¸n logic PhÐp to¸n logic cïng víi to¸n h¹ng t¹o thµnh biÓu thøc logic. BiÓu thøc logic cã thÓ cã gi¸ trÞ lµ 1 (true) hoÆc 0 (false) . To¸n h¹ng a To¸n h¹ng b a && b a || b !a !b 1 1 0 0 1 0 1 0 1 0 0 0 1 1 1 0 0 0 1 1 0 1 0 1 + C¸c phÐp to¸n víi biÕn kiÓu string .
  • 12. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 12 Ta sö dông dÊu “. “ ®Ó ghÐp hai biÕn kiÓu string víi nhau . vÝ dô : $first = “Phineas”; $last = “Phop”; $full = $first. “ ”. $last; // $full = “Phineas Phop” ; echo ($full); Ta cã thÓ ghÐp hai x©u nh− sau: echo ($last. “’s Bicycles”); //print : Phop’s Bicycles §Ó cã thÓ chÌn mét biÕn vµo trong hµng cã kiÓu string th× tªn biÕn ph¶i ®Ó trong dÊu ®ãng më ngoÆc nhän. echo (“${last}’s Bicycles”); + C¸c phÐp to¸n thao t¸c møc bit. C¸c phÐp to¸n thao t¸c møc bit t¸c ®éng lªn tõng bit cña to¸n h¹ng . Ký hiÖu ý nghÜa & | ^ AND bit OR bit XOR bit B¶ng c¸c phÐp to¸n nh− sau : & KÕt qu¶ | KÕt qu¶ ^ KÕt qu¶ 1&1 1&0 0&1 0&0 1 0 0 0 1 | 1 1 | 0 0 | 1 0 | 0 1 1 1 0 1^1 1^0 0^1 0^0 0 1 1 0 PHP còng hç trî c¸c phÐp dÞch ph¶i vµ dÞch tr¸i >> : dÞch ph¶i << : dÞch tr¸i Gi¶ sö $a lµ mét biÕn nguyªn th× phÐp to¸n : $a >> n lµm cho c¸c bit trong $a bÞ dÞch ph¶i ®i n vÞ trÝ. T−¬ng tù ta cã phÐp dÞch tr¸i .
  • 13. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 13 vÝ dô : 11 >> 2 = 2 ; v× : 11 (1011) >> 2 2 (0010) + C¸c phÐp to¸n t¨ng gi¶m : - PhÐp t¨ng : phÐp t¨ng (to¸n tö t¨ng) t¨ng gi¸ trÞ cña to¸n h¹ng lªn mét ®¬n vÞ. $a ++ : $a ®−îc sö dông råi míi t¨ng ++ $a : $a t¨ng råi míi ®−îc sö dông - PhÐp gi¶m : t−¬ng tù nh− phÐp t¨ng, kh¸c lµ gi¸ trÞ bÞ gi¶m ®i mét ®¬n vÞ. $a -- : $a ®−îc sö dông råi míi gi¶m -- $a : $a gi¶m råi míi ®−îc sö dông vÝ dô : $a = 10; // $a b»ng 10 $b = $a++ ; // $a b»ng 11 nh−ng $b b»ng 10 $a = 10; // $a b»ng 10 $b = -- $a ; // $a b»ng 9 vµ $b b»ng 9 + PhÐp to¸n ®iÒu kiÖn. ? : PhÐp to¸n ®iÒu kiÖn cïng víi to¸n h¹ng t¹o nªn biÓu thøc ®iÒu kiÖn. Ta ký hiÖu e1 ,e2, e3 lµ ba to¸n h¹ng. BiÓu thøc cã d¹ng : e1 ? e2 : e3 NÕu e1 != 0 th× gi¸ trÞ cña biÓu thøc ®iÒu kiÖn lµ e2 NÕu e1 == 0 th× gi¸ trÞ cña biÓu thøc ®iÒu kiÖn lµ e3 vÝ dô : t×m max max = $a>$b ? a : b ;
  • 14. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 14 + To¸n tö sizeof (®èi t−îng) : PhÐp to¸n sizeof cho biÕt kÝch th−íc (tÝnh b»ng byte ) « nhí mµ ®èi t−îng chiÕm trong bé nhí. §èi t−îng ë ®©y cã kiÓu lµ integer, double, string. vÝ dô : $a = 10; echo sizeof($a); //sÏ in ra mµn h×nh lµ : 4 IV. C¸c c©u lÖnh ®iÒu khiÓn 1. LÖnh if_else : ®©y lµ lÖnh rÏ nh¸nh cã ®iÒu kiÖn . a. D¹ng 1 : if ( biÓu thøc ) c©u lÖnh; C©u lÖnh ë ®©y t−¬ng ®−¬ng víi mét khèi lÖnh. Mét khèi lÖnh ®−îc ®Æt trong dÊu ngoÆc kÐp. ý nghÜa : + NÕu biÓu thøc kh¸c kh«ng ,th× c©u lÖnh ®−îc thùc hiÖn. + NÕu biÓu thøc b»ng kh«ng, th× c©u lÖnh kh«ng ®−îc thùc hiÖn b. D¹ng 2 : if ( biÓu thøc ) c©u lÖnh 1; else c©u lÖnh 2; ý nghÜa : + NÕu biÓu thøc kh¸c kh«ng ,th× c©u lÖnh 1 ®−îc thùc hiÖn. + NÕu biÓu thøc b»ng kh«ng, th× c©u lÖnh 2 ®−îc thùc hiÖn Chó ý : * C©u lÖnh 1 ë d¹ng 2 lµ lÖnh if_else
  • 15. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 15 + NÕu l−îng else b»ng l−îng If th× else thuéc vÒ If gÇn nhÊt theo tõng cÆp tõ trong ra ngoµi. VÝ dô : $a = 10; $b = 10; $c = 3; $d = 3; $e = 12; $f = 8; if($a == $b) if($c == $d) if($e == $f) $max = $e; else $max = $f; else $max = $d; else $max = $b echo $max ; //printf max = 8 + NÕu l−îng else Ýt h¬n l−îng If th× else thuéc vÒ If ngÇn nhÊt theo tõng cÆp tõ trong ra ngoµi. VÝ dô : <?php if ($a == $b) if ($c == $d) $max = 0 else $max = $d; ?> T−¬ng ®−¬ng víi : <?php if ($a == $b) { if ( $c == $d) $max = 0; } else $max = $b; ?> * C©u lÖnh 2 cña d¹ng 2 lµ elseif :
  • 16. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 16 B¾t nguån tõ : if ( biÓu_thøc1 ) c©u_lÖnh 1; else if ( biÓu_thøc 2 ) c©u_lÖnh 2; else if ( biÓu_thøc 3 ) c©u_lÖnh 3; ... else if ( biÓu_thøc i ) c©u_lÖnh i; ... else c©u_lÖnh n; Cã thÓ viÕt l¹i nh− sau: if ( biÓu_thøc1 ) c©u_lÖnh 1; elseif (biÓu_thøc 2) c©u_lÖnh 2; elseif (biÓu_thøc 3) c©u_lÖnh 3; ... elseif (biÓu_thøc i) c©u_lÖnh i; ... else c©u_lÖnh n; C©u lÖnh elseif t¹o ra lÖnh rÏ nh¸nh cã ®iÒu kiÖn trong ®ã thùc hiÖn 1 trong n c¸ch kh¸c nhau. - NÕu biÓu_thøc i kh¸c kh«ng (i = 1,..n-1) th× thùc hiÖn c©u lÖnh i . - NÕu biÓu_thøc i b»ng kh«ng (i = 1, ..n-1) th× c©u lÖnh thø n ®−îc thùc hiÖn. 2. C©u lÖnh switch : switch (biÓu_thøc n) { case n1: c©u lÖnh 1; break; case n2: c©u lÖnh 2; break; ... case nn: c©u lÖnh nn; [default: c©u lÖnh] }
  • 17. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 17 C©u lÖnh switch lµ c©u lÖnh rÏ nh¸nh cã ®iÒu kiÖn trong ®ã thùc hiÖn mét trong n c¸i rÏ nh¸nh. +NÕu biÓu_thøc n = ni (i = 1, .. n) th× c©u lÖnh sau case ni ®−îc thùc hiÖn cho ®Õn khi gÆp lÖnh break hoÆc dÊu ngoÆc “}” +NÕu biÓu_thøc n != mäi ni (i = 1, .. n) mµ cã nh¸nh Default th× c¸c c©u lÖnh sau Default ®−îc thùc hiÖn. VÝ dô : <?php $val = 6; $a = 5; $b = 6; $d = 7; switch ($val) { case $a : echo (“five”); break; case $b : echo (“six”); break; case $c : echo (“seven”); break; default : echo ($val); } ?> 3. C©u lÖnh FOR: D¹ng lÖnh : for (biÓu_thøc 1; biÓu_thøc 2; biÓu_thøc 3) c©u lÖnh ; LÖnh for lµ lÖnh t¹o chu tr×nh cã ®iÒu kiÖn. B−íc 1 : tÝnh biÓu_thøc 1 B−íc 2 : tÝnh biÓu_thøc 2 : NÕu biÓu_thøc 2 kh¸c 0 th× thùc hiÖn c©u lÖnh vµ sang b−íc 3.
  • 18. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 18 NÕu biÓu_thøc 2 b»ng 0 th× kÕt thóc vßng for B−íc 3 : tÝnh biÓu_thøc 3 vµ quay l¹i b−íc 2. + biÓu_thøc 1, biÓu_thøc 2, biÓu_thøc 3 lµ c¸c thµnh phÇn. Mçi thµnh phÇn cã thÓ gåm nhiÒu biÓu thøc. Khi ®ã mçi biÓu thøc ®−îc viÕt c¸ch nhau mét dÊu phÈy (“,”). +C¸c biÓu thøc ®−îc tÝnh lÇn l−ît tõ tr¸i qua ph¶i +BiÓu thøc trong biÓu_thøc 2 quyÕt ®Þnh thùc hiÖn th©n cña for. VÝ dô : <?php for($i = 0; $j = 4,$i < $j; $i++,$j--) { echo (“i =”. $i. “ ,j = “. $j. “<br>”); } ?> +Cã thÓ v¾ng mÆt bÊt kÓ thµnh phÇn nµo. NÕu v¾ng mÆt biÓu_thøc 2 th× c©u lÖnh lu«n ®−îc thùc hiÖn. MÆc dï v¾ng mÆt vÉn ph¶i cã dÊu chÊm phÈy (“;”) VÝ dô : <?php for ( ; ; ) { if (my_function() == “stop”) break; } ?> +NÕu v¾ng biÓu_thøc 1 vµ biÓu_thøc 3 th× : for ( ; biÓu_thøc 2 ; ) cau_lenh ; t−¬ng ®−¬ng víi : while (biÓu_thøc 2) cau_lenh ; 4. C©u lÖnh WHILE while (biÓu_thøc) c©u lÖnh ;
  • 19. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 19 LÖnh while lµ mét lÖnh t¹o chu tr×nh cã ®iÒu kiÖn. §iÒu kiÖn thùc hiÖn ®−îc kiÓm tra ë ®Çu chu tr×nh. B−íc 1 : TÝnh biÓu thøc NÕu biÓu thøc kh¸c kh«ng, sang b−íc 2 NÕu biÓu thøc b»ng kh«ng, kÕt thóc vßng while B−íc 2 : Thùc hiÖn c©u lÖnh. Quay l¹i b−íc 1. Chó ý : + BiÓu thøc cã thÓ bao gåm nhiÒu biÓu thøc. Khi ®ã c¸c biÓu thøc ®−îc viÕt c¸ch nhau mét dÊu phÈy ,vµ ®−îc tÝnh lÇn l−ît tõ tr¸i qua ph¶i. BiÓu thøc cuèi cïng quyÕt ®Þnh thùc hiÖn c©u lÖnh. + Kh«ng ®−îc phÐp v¾ng mÆt biÓu thøc + §Ó t¹o chu tr×nh v« tËn th× while(1) { ... if (biÓu_thøc) break; ... } VÝ dô : $i = 11; while (--$i) { if (my_function($i) == “error”) { break; } ++ $number; }
  • 20. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 20 5. LÖnh DO ... WHILE D¹ng lÖnh : do { c©u lÖnh; }while (biÓu_thøc); LÖnh do ... while lµ lÖnh t¹o chu tr×nh cã ®iÒu kiÖn, trong ®ã ®iÒu kiÖn thùc hiÖn chu tr×nh ®−îc kiÓm tra ë cuèi chu tr×nh. Ho¹t ®éng : B−íc 1 : Thùc hiÖn c©u lÖnh B−íc 2 : TÝnh biÓu thøc biÓu_thøc +NÕu biÓu thøc biÓu_thøc kh¸c kh«ng th× quay l¹i b−íc 1 +NÕu biÓu thøc biÓu_thøc b»ng kh«ng th× kÕt thóc do ... while. VÝ dô : <?php echo (“<SELECT name=’num’>n”); $i = 0; $total = 10; do { echo (“t <OPTION value=$i>$i</OPTION>n”); }while(++ $i < $total); echo (“</SELECT>n”); ?> 6. LÖnh break Lµ lÖnh rÏ nh¸nh kh«ng ®iÒu kiÖn vµ th−êng dïng ®Ó ra khái th©n cña switch, while, do ... while, for .
  • 21. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 21 LÖnh break chØ cho phÐp tho¸t khái th©n c¸c lÖnh bªn trong nhÊt chøa nã. 7. LÖnh continue Lµ lÖnh rÏ nh¸nh kh«ng ®iÒu kiÖn .LÖnh th−êng dïng ®Ó b¾t ®Çu l¹i mét chu tr×nh míi trong c¸c lÖnh for, while, do ... while mµ kh«ng cÇn thùc hiÖn hÕt toµn bé th©n cña cña lÖnh t¹o chu tr×nh. 8. Khai b¸o tiÒn xö lý include vµ require . §Ó sö dông c¸c ®o¹n m· ë bªn ngoµi, chóng ta cã thÓ sö dông khai b¸o tiÒn xö lý include vµ require. Cho phÐp chóng ta x©y dùng c¸c hµm c¸c h»ng sè, vµ bÊt kú ®o¹n m· nµo sau ®ã cã thÓ chÌn vµo c¸c ®o¹n script. Require kh¸c include lµ, nã cã thÓ lµm thay ®æi néi dung cña trang hiÖn t¹i khi biªn dÞch, c¸c trang nµy dïng ®Ó khai b¸o c¸c biÕn, c¸c h»ng sè hay c¸c ®o¹n m· ®¬n gi¶n kh«ng cã vßng lÆp. Khi ®ã include cho phÐp thùc hiÖn c¸c c©u lÖnh phøc t¹p – cã c©u lÖnh t¹o chu tr×nh. Nã chØ sö dông c¸c hµm nh− nh÷ng hµm ngoµi cña ch−¬ng tr×nh. V. Hµm trong PHP 1. Quy t¾c x©y dùng hµm function tªn_hµm (danh s¸ch ®èi sè h×nh thøc) { Th©n hµm . } + §Þnh nghÜa hµm kh«ng nhÊt thiÕt ph¶i n»m ngoµi th©n mäi hµm, trong hµm cã thÓ cã hµm kh¸c. Nh−ng viÖc sö dông mét hµm kh«ng kh¸c nhau gi÷a x©y dùng hµm trong th©n mét hµm vµ ngoµi mäi hµm . + Tªn hµm tuú ®Æt vµ kh¸c tªn hµm chuÈn. + Hµm cã thÓ cã gi¸ trÞ tr¶ vÒ hoÆc kh«ng. + C¸c c©u lÖnh ®−îc quyÒn gäi bÊt kú hµm nµo ®· ®−îc khai b¸o vµ ®· ®−îc ®Þnh nghÜa.
  • 22. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 22 + Return : - Tr¶ mét gi¸ trÞ vÒ cho n¬i gäi hµm - Lµ n¬i b¸o kÕt thóc hµm 2. Gäi hµm . + Hµm ph¶i ®−îc x©y dùng (khai b¸o) tr−íc khi gäi . + Khi gäi hµm, nÕu cã gi¸ trÞ tr¶ vÒ th−êng ®−îc ®Æt trong biÓu thøc . 3. BiÕn toµn cô vµ biÕn côc bé. Th«ng th−êng PHP coi c¸c biÕn ®−îc sö dông trong th©n cña hµm lµ biÕn côc bé. NghÜa lµ biÕn trong th©n hµm kh«ng lµm thay ®æi gi¸ trÞ cña biÕn ë ngoµi hµm ®ã. Muèn hµm lµm thay ®æi gi¸ trÞ cña biÕn ngoµi ta cÇn khai b¸o global tr−íc biÕn ®ã trong th©n hµm . VÝ dô : $position = “m”; function change_pos() { $position = “s”; } change_pos(); echo (“$position”); //Prints “m” Ta thÊy biÕn $position gi¸ trÞ kh«ng ®æi sau khi gäi hµm change_pos(). $position = “m”; function change_pos() { global $position; $position = “s”; } change_pos(); echo (“$position”); //Prints “s”
  • 23. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 23 Ta cã thÓ viÕt nh− trªn hoÆc ta cã thÓ viÕt : $position = “m”; function change_pos() { GOLOBALS[$position] = “s”; } change_pos(); echo (“$position”); //Prints “s” VI. BiÕn m¶ng trong PHP 1. M¶ng mét chiÒu M¶ng lµ mét biÕn bao gåm nhiÒu phÇn tö cã cïng tªn nh−ng kh¸c nhau vÒ chØ sè (c¸c chØ sè nµy t¨ng dÇn tõ 0 ®Õn n). Víi ng«n ng÷ lËp tr×nh C, c¸c phÇn tö cña m¶ng cã cïng kiÓu d÷ liÖu ,nh−ng víi PHP th× mÒm dÎo h¬n. C¸c phÇn tö cña m¶ng kh«ng nhÊt thiÕt ph¶i cïng kiÓu. a. Khai b¸o m¶ng mét chiÒu. Ta cã thÓ khai b¸o m¶ng b»ng c¸ch g¸n tªn m¶ng víi dÊu ®ãng më ngoÆc vu«ng kh«ng cã chØ sè. Chóng ta h·y xÐt vÝ dô sau : $countries[] = “cr”; $countries[] = “de”; $countries[] = “us”; VÝ dô trªn t¹o ra mét m¶ng gåm ba phÇn tö cã chØ sè lµ 0, 1 vµ 2. ViÖc ®ã còng t−¬ng tù nh− ta g¸n : $countries[0] = “cr”; $countries[1] = “de”; $countries[2] = “us”; Ngoµi ra c¸c chØ sè cña m¶ng kh«ng nhÊt thiÕt ph¶i t¨ng dÇn mµ cã thÓ ®−îc khai b¸o nh sau : $countries[50] = “cr”;
  • 24. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 24 $countries[20] = “de”; $countries[10] = “us”; echo (“$countries[20]”); // prints de Khi ®ã ®Ó thªm mét phÇn tö míi vµo m¶ng chóng ta cã thÓ viÕt $countries[] = “uk”; // chØ sè sÏ lµ 51 Mét phÇn tö míi ®−îc thªm vµo víi chØ sè lµ chØ sè lín nhÊt cña m¶ng céng thªm mét. Ngoµi ra còng cã thÓ khai b¸o m¶ng mét chiÒu b»ng c©u lÖnh array $countries = array (“cr”, “de”, “us”) ; echo (“$countries[2]”); //prints “us” §Ó chØ sè kh«ng b¾t ®Çu tõ kh«ng ta cã thÓ khai b¸o l¹i nh− sau $countries = array (1 => “cr”, “de”, “us”); echo (“$countries[2]”); //prints “de” To¸n tö => cã thÓ ®−îc sö dông tr−íc bÊt kú mét phÇn tö nµo trong m¶ng $countries = array (“cr”, 7 => “de”, “us”); vµ khi ®ã phÇn tö cã gi¸ trÞ “cr” cã chØ sè lµ 0 cßn phÇn tö cã gi¸ trÞ “de”, “us” lÇn l−ît lµ 7 vµ 8. Kh¸c víi ng«n ng÷ lËp tr×nh C, chØ sè cña m¶ng mét chiÒu kh«ng chØ lµ c¸c sè nguyªn mµ cßn lµ x©u ký tù. Ta cã thÓ khai b¸o nh− sau : $countries[“ca”] = “Canada”; $countries[“cr”] = “Costa Rica”; $countries[“de”] = “Germany”; $countries[“uk”] = “United Kingdom”; $countries[“us”] = “United States”; echo (“$countries[“ca”]); // print Canada NÕu dïng array th× sÏ lµ : $countries = (“ca” => “Canada”,
  • 25. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 25 “cr” => “Costa Rica”, “de” => “Germany”, “uk” => “United Kingdom”, “us” => “United States”);
  • 26. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 26 b. Lµm viÖc víi c¸c phÇn tö cña m¶ng Cã thÓ sö dông vßng lÆp for xÐt tõng phÇn tö cña m¶ng. $countries = array (“cr”, “de”, “us”); $num_elements = count($countries); for ($i = 0 ; $i < $num_elements ; $i ++) { echo (“$countries[$i] <BR>n”); } VÝ dô trªn sÏ ®óng khi chØ sè cña c¸c phÇn tö t¨ng dÇn ®Òu. NÕu chØ sè c¸c phÇn tö kh«ng theo mét thø tù nµo c¶ ta cã thÓ sö dông hµm list() vµ each(). reset ($countries); while (list ($key, $value ) = each ($countries)) { echo (“ChØ sè $key, gi¸ trÞ $value”); } §Ó di chuyÓn con trá tíi phÇn tö tiÕp theo hoÆc tr−íc ®ã ta còng cã thÓ dïng hµm next() - hµm next() tr¶ vÒ lµ 1 (true) nÕu phÇn tö tiÕp theo kh«ng ph¶i lµ phÇn tö cuèi cïng, ng−îc l¹i lµ 0 (false) vµ prev() - hµm prev() cho gi¸ trÞ tr¶ vÒ lµ 1 (true) nÕu phÇn tö tiÕp theo kh«ng ph¶i lµ phÇn tö ®Çu tiªn, ng−îc l¹i lµ 0 (false). Hµm key () sÏ cho biÕt chØ sè vµ hµm current() sÏ cho biÕt gi¸ trÞ cña phÇn tö ®ã . $arr = array (3, 4, 5, 6, 7); do { $k = key ($arr); $val = current ($arr); echo (“PhÇn tö $k = $val”); }while 2. M¶ng hai chiÒu Chóng ta cã thÓ khai b¸o m¶ng hai chiÒu nh− sau :
  • 27. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 27 $countries = array (“Europs” => array (“de”, “uk”), “North America” => array (“ca”, “cr”, “us”)); echo ($countries[“Europs”][1]); // print “uk” echo ($countries[“North America”][2]); // print “us” Ta cã cÊu tróc cña m¶ng trªn nh− sau : $countries[“Europs”] $countries[“North America”] [0] [1] [0] [1] [2] “de” “uk” “ca” “cr” “us” Còng gièng nh− m¶ng mét chiÒu ta sÏ dïng vßng lÆp nh− for, while, do ... while ®Ó duyÖt qua c¸c phÇn tö cña m¶ng. VÝ dô : $countries = array (“Europs” => array (“de”, “uk”), “North America” => array (“ca”, “cr”, “us”)); while (list ($key1) = each ($countries)) { echo (“$key1 : <BR>n”); while (list ($key2, $val) = each($countries[“$key1”])) { echo (“ - $val <BR>n”) } } Khi ch¹y ch−¬ng tr×nh sÏ in ra mµn h×nh lµ : Europ : - de - uk North America : - ca - cr - us
  • 28. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 28 3. C¸c hµm s¾p xÕp m¶ng . PHP cung cÊp cho chóng ta c¸c hµm ®Ó s¾p xÕp m¶ng. Víi mçi lo¹i m¶ng sÏ cã mét hµm t−¬ng øng. Víi m¶ng cã chØ sè lµ kiÓu nguyªn chóng ta cã hµm sort() ®Ó s¾p xÕp t¨ng dÇn c¸c phÇn tö cña m¶ng, hµm rsort() sÏ s¾p xÕp c¸c phÇn tö cña m¶ng gi¶m dÇn . $countries = array (“us”, “uk”, “ca”, “cr”, “de”); sort ($countries); while (list ($key, $val) = each ($countries)) { echo (“Element $key equals $val <BR>n”); } Khi ch¹y ch−¬ng tr×nh sÏ lµ : Element 0 equals ca Element 1 equals cr Element 2 equals de Element 3 equals uk Element 4 equals us Víi m¶ng chØ sè cã kiÓu string th× dïng hµm asort (), arsort () ®Ó s¾p xÕp m¶ng theo chiÒu t¨ng dÇn vµ gi¶m dÇn. NÕu b¹n dïng c¸c hµm sort() vµ rsort() th× c¸c chØ sè cã kiÓu string sÏ chuyÓn thµnh c¸c chØ sè cã kiÓu nguyªn. $countries = array(“us” => “United States”, “uk” => “United Kingdom”, “ca” => “Canada”, “cr” => “Costa Rica”, “de” => “Germany”); asort ($countries); while (list($key, $val) = each($countries)) { echo “Chi so $key bang $val <BR>n”;
  • 29. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 29 } KÕt qu¶ khi ch¹y ch−¬ng tr×nh : Chi so ca bang Canada Chi so cr bang Costa Rica Chi so de bang Germany Chi so uk bang United Kingdom Chi so us bang United States Nh−ng nÕu thay dßng asort ($countries); b»ng sort ($countries); kÕt qu¶ sÏ lµ Chi so 0 bang Canada Chi so 1 bang Costa Rica Chi so 2 bang Germany Chi so 3 bang United Kingdom Chi so 4 bang United States §Ó s¾p xÕp m¶ng t¨ng dÇn hay gi¶m dÇn theo chØ sè chóng ta cã hµm ksort() – t¨ng dÇn vµ krsort() – gi¶m dÇn . $countries = array(“e” => “United States”, “d” => “United Kingdom”, “c” => “Canada”, “b” => “Costa Rica”, “a” => “Germany”); ksort ($countries); while (list($key, $val) = each($countries)) { echo “Chi so $key bang $val <BR>n”; } KÕt qu¶ : Chi so a bang Germany
  • 30. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 30 Chi so b bang Costa Rica Chi so c bang Canada Chi so d bang United Kingdom Chi so e bang United States VII. LËp tr×nh h−íng ®èi t−îng (OOP) 1. §Þnh nghÜa líp . Chóng ta cã thÓ ®Þnh nghÜa líp b»ng to¸n tö class, vµ trong mçi mét líp chóng ta sÏ x©y dông c¸c ph−¬ng thøc vµ thuéc tÝnh cho líp ®ã . Gi¶ sö muèn ®Þnh nghÜa líp “Sesssion” chóng ta lµm nh− sau : <?php class Session { // §Þnh nghÜa c¸c thuéc tÝnh vµ ph−¬ng thøc // X©y dùng c¸c ph−¬ng thøc cho líp } // KÕt thóc mét líp ?> §Ó ®Þnh nghÜa thuéc tÝnh cho líp chóng ta ®Æt tõ kho¸ var tr−íc thuéc tÝnh ®ã. <? class Session { var $sqlhost = “localhost”; var $sqluser = “root”; var $sqlpass = “password”; var $sqldb = “session”;
  • 31. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 31 var $linkid; var $seshid; var $sessdata; var $userid; var $error_no; var $err; ... // §Þnh nghÜa c¸c ph−¬ng thøc ë ®©y } //KÕt thóc ®Þnh nghÜa líp ?> TiÕp theo chóng ta sÏ ®Þnh nghÜa c¸c ph−¬ng thøc cho líp trªn. Ph−¬ng thøc cÇn x©y dùng ®Çu tiªn lµ Session() sau ®ã ®Õn c¸c ph−¬ng thøc kh¸c. <? // §Þnh nghÜa líp Session class Session { // §Þnh nghÜa c¸c thuéc tÝnh .. . // §Þnh nghÜa c¸c ph−¬ng thøc function Session($localSeshID, $localUserID=0) { $this->seshid = $localSeshID; $this->userid = $localUserID; // KÕt nèi tíi MySQL $this->linkid=mysql_connect($this->sqlhost, $this->sqluser, $this- >sqlpass);
  • 32. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 32 if (!$this->linkid) { $this->err=mysql_error(); $this->error_no=102; } } ... // §Þnh nghÜa c¸c ph−¬ng thøc kh¸c } ?> 2. Sö dông líp ®· ®−îc ®Þnh nghÜa. §Ó khai b¸o mét ®èi t−îng cã kiÓu thuéc líp ®· x©y dùng ta dïng to¸n tö new nh− sau : <?php require (“classes/sessions.php”); //include class $mysesh = new Session($seshid); if ($mysesh->error_no) { //Th«ng b¸o cã lçi } $user = $mysesh->sessdata[userid]; ?> <HTML> <HEAD> <TITLE>Welcome to my website, <? echo $user ?></TITLE> </HEAD> <BODY> <a href=”nextpage.php?seshid=<? print $user ?>”>Next Page </a>
  • 33. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 33 <FORM ACTION=”nextpage.php” METHOD=”POST”> <input type=”hidden” name=”seshid” value=”<? print $seshid ?>”> </FORM> </BODY> </HTML> VIII. T×m hiÓu thªm vÒ HTML PhÇn mét chóng ta ®· t×m hiÓu s¬ l−îc vÒ ng«n ng÷ HTML. Trong môc nµy chóng ta sÏ tr×nh bµy thªm vÒ nã víi träng t©m lµ FORM cña HTML. Lý do lµ v× khi muèn giao tiÕp gi÷a HTML vµ PHP script th× kh«ng thÓ kh«ng biÕt ®Õn FORM. FORM lµ c«ng cô phæ biÕn nhÊt ®Ó chuyÓn d÷ liÖu tõ HTML ®Õn PHP script (client lªn server). Th«ng th−êng, khi viÕt mét script, ng−êi ta thiÕt kÕ mét FORM sao cho nã cung cÊp ®Çy ®ñ nh÷ng th«ng tin mµ script cÇn ®Ó xö lý. 1. CÊu tróc cña mét FORM Mét FORM ®−îc më ®Çu b»ng thÎ <FORM ... > vµ kÕt thóc b»ng thÎ </FORM>. Trong FORM cã : - Thuéc tÝnh : FORM th−êng cã ba thuéc tÝnh, ba thuéc tÝnh nµy n»m trong thÎ FORM më ®Çu cña mét FORM : action, method, enctype . - C¸c thÎ ®−îc dïng trong FORM : input, select, textarea, hn, p, hr, dir, dl, menu, ol, ul, address, blockquote, [isindex]. pre . - FORM cã ba thµnh phÇn chÝnh : textarea, select, input . - FORM cã thÓ ®−îc dïng trong c¸c thÎ : blockquote,body,dd, li. 2. C¸c thuéc tÝnh Khi t¹o mét FORM ,c«ng viÖc ®Çu tiªn lµ x¸c ®Þnh thuéc tÝnh cña nã. - Thuéc tÝnh action : Action=”URL” chØ ®Õn script mµ FORM sö dông. Ngoµi ra nã còng cã thÓ lµ mailto url, khi ®ã néi dung cña FORM ®−îc mail ®Õn ®Þa chØ trong url .
  • 34. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 34 - Thuéc tÝnh method : Method cã thÓ ®−îc g¸n b»ng “GET” hoÆc “POST” ,nã chØ ra ph−¬ng thøc Post hay Get sÏ ®−îc sö dông trong FORM, gi¸ trÞ ngÇm ®Þnh lµ Get. - Thuéc tÝnh enctype : Enctype=”Mime_type” :chØ ra lo¹i d÷ liÖu sÏ göi ®i. Gi¸ trÞ ngÇm ®Þnh lµ application/x-www-form-urlencode. Trong mét trang chóng ta cã thÓ sö dông nhiÒu FORM nhng kh«ng ®−îc lång chóng vµo nhau. 2. C¸c thµnh phÇn c¬ b¶n cña FORM. Mét FORM ,th«ng th−êng cã ba thµnh phÇn chÝnh : +Textarea +Select +Input a - Textarea §−îc b¾t ®Çu b»ng thÎ <Texterea> vµ kÕt thóc b»ng thÎ </Texterea>. Bªn trong chøa c¸c ký tù, thÎ nµy ®−îc dïng lång vµo trong FORM. C¸c thuéc tÝnh cña Texterea . - Name : §Þnh nghÜa tªn cña thµnh phÇn, thuéc tÝnh nµy lu«n lu«n ph¶i cã. - Rows : Cho biÕt sè hµng cña hép v¨n b¶n. - Cols : Cho biÕt sè cét cña v¨n b¶n. Wrap : ChØ ra c¸ch xö lý word_wraping (c¨n chiÒu dµi cña dßng v¨n b¶n theo kÝch th−íc cña hép v¨n b¶n) trong hép tho¹i. NÕu wrap=”off”, chøc n¨ng word_wraping bÞ cÊm. NÕu wrap=”vitual”, chøc n¨ng nµy ®−îc bËt lªn, khi gâ v¨n b¶n vµo, ta thÊy con trá tù ®éng xuèng hµng mçi khi nã ch¹y ®Õn biªn cña hép v¨n b¶n, ký tù newline (OA hex) tù ®éng ®−îc thªm vµo nh−ng kh«ng ®−îc göi ®i cïng FORM. NÕu wrap=”physical”, chøc n¨ng nµy còng ®−îc bËt vµ ho¹t ®éng nh− trªn nh−ng ký tù newline ®−îc göi ®i cïng víi FORM.
  • 35. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 35 V¨n b¶n n»m gi÷a hai thÎ <Texterea> vµ </Texterea> sÏ ®−îc thÓ hiÖn nh− ®o¹n v¨n b¶n ngÇm ®Þnh trong vïng d÷ liÖu. VÝ dô: <Texterea name=”van_ban” rows=”4” cols=”40”> .. . </ Texterea > b. Select §−îc b¾t ®Çu b»ng thÎ <Select> vµ kÕt thóc b»ng thÎ </ Select >, cÆp thÎ nµy cã thÓ lång trong FORM hay bÊt kú thµnh phÇn nµo cña FORM ngo¹i trõ Texterea vµ Select . Select cã c¸c thuéc tÝnh sau : - Name : Tªn cña thµnh phÇn. - Size : Cho biÕt sè thµnh phÇn sÏ hiÓn thÞ, gi¸ trÞ ngÇm ®Þnh lµ 1, do ®ã danh s¸ch lùa chän th−êng ®−îc thÓ hiÖn díi d¹ng pop-up menu. Thuéc tÝnh nµy cã thÓ kh«ng cã. - Multiple : NÕu thuéc tÝnh nµy ®−îc thiÕt lËp, nhiÒu lùa chän sÏ ®−îc chän cïng mét lóc, ng−îc l¹i chØ ®−îc chän mét item. Khi sö dông Select, chóng ta cã thÓ dïng thªm Option <Option>. .. .. .. </Option> Bªn trong chøa c¸c ký tù, cã thÓ ®−îc sö dông lång vµo Select . C¸c thuéc tÝnh Option : - Disable : §¸nh mét lùa chän bÞ cÊm. Khi hiÓn thÞ, chän lùa nµy sÏ bÞ che mê. - Selected : §¸nh dÊu chän lùa nµy ®· ®−îc chän, nÕu thuéc tÝnh Multiple ®−îc bËt trong Select, b¹n cã thÓ ®¸nh dÊu Selected nhiÒu chän lùa cïng lóc. Nã dïng ®Ó ®¸nh dÊu c¸c lùa chän ngÇm ®Þnh. - Value : ChØ ra gi¸ trÞ ®−îc g¸n cho lùa chän, nÕu kh«ng cã th× néi dung cña th− môc option sÏ ®−îc göi ®i thay cho value. c. Input
  • 36. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 36 Më ®Çu b»ng thÎ < Input >, thÎ nµy cã thÓ dïng trong bÊt cø thµnh phÇn nµo kh¸c cña FORM ngo¹i trõ Texterea vµ Select. C¸c thuéc tÝnh : - Align : Cã thÓ lµ mét trong ba gi¸ trÞ top, middle, bottom dïng ®Ó c¨n lÒ ¶nh víi c¸c v¨n b¶n xung quanh, thuéc tÝnh nµy chØ cã ý nghÜa víi Type=“image” . - Name : g¾n tªn biÕn cho d÷ liÖu cña thµnh phÇn nµy. Gi¸ trÞ cña thuéc tÝnh do user lùa chän . - Type : ®Þnh ra mét trong nh÷ng gi¸ trÞ sau checkbox, hidden, image, password, radio, reset, submit, text, file, bottom . - Checked : chØ ra mét nót radio, hay mét checkbox c¬ ®−îc chän hay kh«ng. - Maxlength : chØ ra chiÒu dµi tèi ®a mµ hép tho¹i v¨n b¶n cã thÓ chøa, thuéc tÝnh nµy chØ cã ý nghÜa víi input cã type=”text” hay type=”password” . - Size : chØ ra kÝch th−íc thùc sù cña hép tho¹i v¨n b¶n. IX. Tãm l−îc Nh− vËy, chóng ta ®· kh¶o s¸t hÇu hÕt c¸c chøc n¨ng c¬ b¶n cña PHP, tõ c¸c kiÓu d÷ liÖu, khai b¸o biÕn, hµng, m¶ng cho tíi c¸ch thùc hiÖn ch−¬ng tr×nh d¹ng M¸y kh¸ch/M¸y chñ (Client/Server), vµ nhóng c¸c ®o¹n m· PHP vµo c¸c trang HTML .v.v. Nh− trªn chóng ta ®· tr×nh bµy, c¬ së d÷ liÖu cho trang Web lµ thµnh phÇn kh«ng thÓ thiÕu, nã ®ãng vai trß quyÕt ®Þnh cho ch−¬ng tr×nh. VÝ lý do ®ã, phÇn tiÕp theo chóng ta sÏ kh¶o s¸t ng«n ng÷ SQL vµ c¸c hµm API cña PHP ®Ó thùc hiÖn c¸c lÖnh truy vÊn trªn hÖ qu¶n trÞ c¬ së d÷ liÖu MySQL. X. C¸c hµm API trong PHP 1. Giíi thiÖu vÒ MySQL . PHP hç trî mét sè l−îng lín c¸c hµm lµm viÖc víi c¬ së d÷ liÖu nh Oracle, Sybase, PostgreSQL, MySQL. .. Th«ng qua chuÈn ODBC (Open Database Connectivity), b»ng c¸ch sö dông c¸c hµm API (Application
  • 37. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 37 Programming Interface) mµ PHP cã thÓ lµm viÖc ®−îc víi nhiÒu hÖ qu¶n trÞ c¬ së d÷ liÖu nh− vËy. NÕu hÖ qu¶n trÞ c¬ së d÷ liÖu kh«ng hç trî ODBC ,vµ h¬n n÷a ODBC cã ®Æc ®iÓm chØ hç trî ë d¹ng chuÈn th× PHP cã thÓ lµm viÖc víi ODBC ë tÇng trªn. NÕu kh«ng muèn sö dông ODBC ta cã thÓ sö dông c¸c hµm API . Trong phÇn nµy chóng ta chØ sö dông c¸c hµm API ®Ó lµm viÖc víi hÖ qu¶n trÞ c¬ së d÷ liÖu MySQL . 2. C¸c hµm c¬ b¶n lµm viÖc víi c¬ së d÷ liÖu MySQL. a) C¸c hµm kÕt nèi ®Õn MySQL Server PHP cung cÊp hai hµm ®Ó kÕt nèi víi c¬ së d÷ liÖu MySQL : mysql_connect vµ mysql_pconnect . + mysql_connect () : hµm nµy sÏ t¹o ra mét liªn kÕt tíi m¸y chñ MySQL . Có ph¸p : int mysql_connect (string [hostname [:port] [:/path_to_socket]], string [username], string [password]); Trong ®ã : - hostname : Tªn m¸y chñ c¬ së d÷ liÖu, n¬i trang web sÏ chøa c¬ së d÷ liÖu. Gi¸ trÞ ngÇm ®Þnh lµ “localhost’” - :port : §Þa chØ cæng, n¬i bé m¸y c¬ së d÷ liÖu l¾ng nghe yªu cÇu. Gi¸ trÞ ngÇm ®Þnh lµ “:3306” . - :/path_to_socket : Còng gièng nh− :port nh−ng chØ cho hÖ ®iÒu hµnh UNIX. Gi¸ trÞ ngÇm ®Þnh lµ “:/tmp/mysql.sock” . - username : Tªn cña ng−êi sö dông ®−îc phÐp kÕt nèi vµo bé m¸y c¬ së d÷ liÖu. - password : MËt khÈu cña ng−êi sö dông ®Ó kÕt nèi vµo bé m¸y c¬ së d÷ liÖu. Hµm nµy tr¶ vÒ m· sè nhËn d¹ng nÕu kÕt nèi thµnh c«ng, gi¸ trÞ 0 (false) nÕu viÖc kÕt nèi cã lçi. M· sè nhËn d¹ng nµy sÏ ®−îc sö dông cho tÊt c¶ c¸c yªu cÇu tíi bé m¸y c¬ së d÷ liÖu sau nµy.
  • 38. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 38 Sù kÕt nèi nµy sÏ ®ãng l¹i khi gäi hµm mysql_close() hoÆc kÕt thóc ®o¹n PHP script. + mysql_pconnect() : Hµm nµy t¹o ra mét liªn kÕt bÒn v÷ng víi m¸y chñ MySQL. Có ph¸p : int mysql_pconnect (string [hostname [:port] [:/path_to_socket]], string [username], string [password]); Tham sè vµ gi¸ trÞ tr¶ vÒ cña hµm nµy còng gièng hµm mysql_connect(). Sù kh¸c biÕt gi÷a hai hµm nµy lµ liªn kÕt tíi m¸y chñ MySQL kh«ng bÞ ®ãng l¹i kÓ c¶ khi kÕt thóc kÞch b¶n (script) PHP hay gäi hµm mysql_close(). Môc ®Ých cña hµm nµy lµ lu«n lu«n duy tr× liªn kÕt tíi m¸y chñ MySQL do lu«n cã sù yªu cÇu tíi m¸y chñ, tr¸nh cho m¸y chñ ph¶i t×m kiÕm m· sè nhËn d¹ng míi tõ ®ã gi¶m thêi gian truy cËp . Chó ý : hµm nµy chØ thùc hiÖn ®−îc khi PHP ®−îc ®Þnh cÊu h×nh nh− lµ mét module cña Web server . + mysql_close() : Hµm nµy huû bá sù kÕt nèi tíi m¸y chñ MySQL . Có ph¸p : int mysql_close(int [link_identifier]); Tham sè link_identifier lµ m· sè nhËn d¹ng t¹o ra bëi hµm mysql_connect(). Hµm tr¶ vÒ lµ True nÕu thµnh c«ng, ng−îc l¹i lµ False . b) C¸c hµm thao t¸c trªn CSDL + mysql_create_db() : Hµm t¹o c¬ së d÷ liÖu Có ph¸p : int mysql_create_db(string name, int [link_identifier]) ; Trong ®ã : - string name : Tªn cña c¬ së d÷ liÖu cÇn t¹o. - int link_identifier : M· sè nhËn d¹ng ®−îc cÊp bëi hµm mysql_connect() . Chóng ta hoµn toµn cã thÓ göi c©u lÖnh SQL ®Ó t¹o c¬ së d÷ liÖu th«ng qua hµm mysql_query() .
  • 39. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 39 + mysql_drop_db() : Hµm xo¸ c¬ së d÷ liÖu Có ph¸p : int mysql_drop_db(string name, int [link_identifier]); Trong ®ã : - string name : Tªn cña c¬ së d÷ liÖu cÇn xo¸ . - int link_identifier : M· sè nhËn d¹ng ®−îc cÊp bëi hµm mysql_connect() . Chóng ta hoµn toµn cã thÓ göi c©u lÖnh SQL ®Ó xo¸ c¬ së d÷ liÖu th«ng qua hµm mysql_query(). + mysql_select_db() : Hµm cho c¬ së d÷ liÖu ho¹t ®éng . Có ph¸p : int mysql_select_db(string database_name, int [link_identifier]); Trong ®ã: - database_name : Tªn cña c¬ së d÷ liÖu mµ sau nµy c¸c hµm API kh¸c cña PHP sÏ thùc hiÖn trªn ®ã. - int link_identifier : M· nhËn d¹ng ®−îc cÊp bëi hµm mysql_connect(). C©u lÖnh nµy sÏ g¾n tªn c¬ së d÷ liÖu víi m· nhËn d¹ng, sau nµy khi lµm viÖc víi link_identifier sÏ bao gåm c¶ c¬ së d÷ liÖu ®−îc chän . c) C¸c hµm thao t¸c trªn d÷ liÖu + mysql_query() : Hµm göi c©u lÖnh SQL tíi m¸y chñ MySQL . Có ph¸p : int mysql_query(string query, [int link_identifier]) ; Trong ®ã : - string query : C©u lÖnh SQL cÇn göi tíi m¸y chñ MySQL . - int link_identifier : M· sè nhËn d¹ng, nã ph¶i ®−îc thùc hiÖn trong hµm mysql_select_db() tr−íc ®ã . + mysql_db_query() : Hµm göi c©u lÖnh SQL tíi m¸y chñ MySQL . Có ph¸p :
  • 40. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 40 int mysql_db_query(string database, string query, int [link_identifier]); Trong ®ã : - string database : Tªn c¬ së d÷ liÖu c©u lÖnh SQL sÏ thùc hiÖn trªn ®ã. - string query : C©u lÖnh SQL cÇn thùc hiÖn . - link_identifier : M· sè nhËn d¹ng ®−îc cÊp bëi hµm mysql_connect() Hµm nµy chØ râ c©u lÖnh ®−îc thùc hiÖn trªn c¬ së d÷ liÖu nµo nªn tr−íc ®ã kh«ng cÇn thùc hiÖn hµm mysql_select_db(); +mysql_insert_id() : Hµm lÊy gi¸ trÞ ®−îc sinh ra tõ c©u truy vÊn INSERT tríc Có ph¸p : int mysql_insert_id([link_identifier]) ; trong ®ã: int link_identifier : M· sè nhËn d¹ng ®−îc cÊp bëi hµm mysql_connect() . Hµm nµy tr¶ vÒ gi¸ trÞ id ®−îc sinh ra trong cét AUTO_INCREMENT bëi c©u truy vÊn tr−íc ®ã. §iÒu nµy chØ cã t¸c dông trªn link_identifier ®−îc chØ ra trong hµm, nÕu gäi hµm trªn mµ kh«ng chØ ®Þnh tham sè link_identifier th× liªn kÕt ®−îc më cuèi cïng sÏ ®−îc chØ ®Þnh. Hµm mysql_insert_id() tr¶ vÒ gi¸ trÞ 0 nÕu c©u truy vÊn tr−íc ®ã kh«ng sinh ra mét gi¸ trÞ AUTO_INCREMENT. NÕu ta muèn gi÷ l¹i gi¸ trÞ cho lÇn sau, th× ph¶i gäi hµm nµy ngay sau c©u truy vÊn sinh ra gi¸ trÞ . + mysql_fetch_row() : Hµm tr¶ vÒ mét m¶ng lµ gi¸ trÞ cña mét b¶ng ghi hiÖn t¹i víi chØ sè lµ sè thø tù cña c¸c tr−êng (chØ sè b¾t ®Çu tõ 0). Sau ®ã hµm sÏ trá tíi b¶ng ghi tiÕp theo cho tíi khi gÆp b¶ng ghi cuèi cïng hµm tr¶ vÒ gi¸ trÞ false. §Ó truy xuÊt tíi c¸c gi¸ trÞ cña cét ta viÕt : tªn_m¶ng[sè thø tù] Có ph¸p : array mysql_fetch_row( int result_identifier);
  • 41. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 41 Trong ®ã : result_identifier lµ m· sè tr¶ vÒ cña hµm mysql_query() hoÆc mysql_db_query() . VÝ dô : <?php $mysql = “select id, name from ds_thanhvien”; // cau lenh SQL $link = mysql_connect($host, $user, $password); //lay ma mysql_select_db($database_name, $link); $result = mysql_query($mysql ,$link); while ($row = mysql_fetch_row($result)) { echo $row[0] ; echo $row[1]; } ?> + mysql_fetch_array() : Hµm tr¶ vÒ mét m¶ng lµ gi¸ trÞ cña mét b¶ng ghi hiÖn t¹i, sau ®ã hµm sÏ trá tíi b¶ng ghi tiÕp theo cho tíi khi gÆp b¶ng ghi cuèi cïng hµm tr¶ vÒ gi¸ trÞ false. Có ph¸p : array mysql_fetch_array( int result_identifier [, int result_type] ); Trong ®ã : result_identifier lµ m· sè tr¶ vÒ cña hµm mysql_query() hoÆc mysql_db_query() . §Ó truy xuÊt ®Õn c¸c thµnh phÇn cña cét : tªn_biÕn_m¶ng[“tªn_trêng”]; result_type lµ mét h»ng sè cã thÓ nhËn c¸c gi¸ trÞ sau: -MYSQL_NUM : chØ tr¶ l¹i mét m¶ng chøa c¸c chØ sè lµ sè (gièng nh− hµm mysql_fetch_row() ) -MYSQL_ASSOC: chØ tr¶ l¹i mét m¶ng liªn kÕt
  • 42. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 42 -MYSQL_BOTH : tr¶ l¹i m¶ng chøa ®ùng c¸c chØ sè gåm c¶ c¸c con sè vµ chØ sè liªn kÕt . Hµm nµy lµ sù më réng cña hµm mysql_fetch_row(). Nã cho phÐp truy cËp tr−êng d÷ liÖu cña m¶ng kÕt qu¶ kh«ng chØ th«ng qua c¸c chØ sè lµ c¸c sè mµ chóng cã thÓ lµ tªn cña c¸c tr−êng d÷ liÖu. §iÒu nµy lµm cho viÖc lËp tr×nh ®¬n gi¶n vµ chÝnh x¸c h¬n. VÝ dô: <?php $mysql = “select id, name from ds_thanhvien”; $link = mysql_connect($host, $user, $password); $result = mysql_db_query(“php”, $mysql); while ($row = mysql_fetch_array($result)) { echo “user_id: “. $row[“id”] .“<BR>n”; echo “user_id: “. $row[0] .“<BR>n”; echo “user_name: “. $row[“name”] .“<BR>n”; echo “user_name: “. $row[1] .“<BR>n”; } mysql_free_result ($result); ?> + mysql_fetch_object() : Hµm tr¶ vÒ mét ®èi t−îng lµ gi¸ trÞ cña mét b¶ng ghi hiÖn thêi. Sau ®ã hµm sÏ trá tíi b¶ng ghi tiÕp theo cho tíi khi gÆp b¶ng ghi cuèi cïng hµm tr¶ vÒ gi¸ trÞ false. §Ó truy xuÊt tíi c¸c gi¸ trÞ cña cét ta viÕt tªn_object->tªn_cét . Có ph¸p : object mysql_fetch_object(int result_identifier); Trong ®ã : result_identifier lµ m· sè tr¶ vÒ cña hµm mysql_query() hoÆc mysql_db_query() . VÝ dô :
  • 43. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 43 <?php $mysql = “select id, name from ds_thanhvien”; $link = mysql_connect($host, $user, $password); $result = mysql_db_query(“php”, $mysql); while ($row = mysql_fetch_object($result)) { echo $row->id ; echo $row->name; } ?> +mysql_fetch_assoc() :lÊy vÒ mét dßng kÕt qu¶ nh− lµ mét m¶ng liªn kÕt . có ph¸p: array mysql_fetch_assoc(int result_identifier) Trong ®ã : result_identifier lµ m· sè tr¶ vÒ cña hµm mysql_query() hoÆc mysql_db_query() . Hµm tr¶ vÒ mét m¶ng t−¬ng øng víi mét b¶n ghi ®−îc lÊy vÒ vµ tr¶ l¹i FALSE nÕu kh«ng cã b¶n ghi nµo. Hµm nµy t−¬ng ®−¬ng víi hµm array mysql_fetch_array() víi tham sè result_type lµ : MYSQL_ASSOC vÝ dô : <?php $mysql = “select id, name from ds_thanhvien”; $link = mysql_connect($host, $user, $password); $result = mysql_db_query(“php”, $mysql); while ($row = mysql_fetch_assoc($result)) { echo $row[“id”]; echo $row[“name”]; } ?>
  • 44. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 44 +mysql_data_seek() Di chuyÓn con trá bªn trong “tËp kÕt qu¶” (cã ®−îc sau khi c©u truy vÊn SELECT ®−îc thùc hiÖn) Có ph¸p: bool mysql_data_seek(int result_identifier, int row_number); Trong ®ã : result_identifier lµ m· sè tr¶ vÒ cña hµm mysql_query(), mysql_db_query(), mysql_list_tables(), mysql_list_dbs() . row_number lµ chØ sè cña b¶n ghi mµ cÇn ®Æt con trá vµo . Hµm tr¶ vÒ true nÕu thµnh c«ng, false nÕu lçi . Hµm nµy sÏ di chuyÓn con trá bªn trong “tËp kÕt qu¶” (®−îc chØ râ bëi tham ®èi result_identifier) ®Õn dßng cã m· b»ng tham ®èi row_number. C¸c dßng trong tËp kÕt qu¶ ®−îc b¾t ®Çu tõ 0 VÝ dô: <?php $link = mysql_pconnect ($host, $user, $password) or die ("Could not connect"); $query = "SELECT last_name, first_name FROM friends"; $result = mysql_db_query (“php”,$query) or die ("Query failed"); # fetch rows in reverse order for ($i = mysql_num_rows ($result) - 1; $i >=0; $i--) { if (! Mysql_data_seek ($result, $i)) { printf ("Cannot seek to row %dn", $i); continue; } if(!($row = mysql_fetch_object ($result))) continue; printf ("%s %s<BR>n", $row->last_name, $row->first_name); } mysql_free_result ($result); ?>
  • 45. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 45 + mysql_num_rows() :tr¶ l¹i sè dßng trong result_identifier (n¬i chøa kÕt qu¶ cña c©u lÖnh SQL ®· ®−îc thùc hiÖn) có ph¸p: mysql_num_rows(int result_identifier) ; Trong ®ã : result_identifier lµ m· sè tr¶ vÒ cña hµm mysql_query(), mysql_db_query(), mysql_list_tables(), mysql_list_dbs() . +mysql_affected_rows() có ph¸p : int mysql_affected_rows(int [link_identifier]) ; Trong ®ã :int link_identifier lµ m· sè nhËn d¹ng, nã ph¶i ®−îc thùc hiÖn trong hµm mysql_select_db() tr−íc ®ã . Hµm tr¶ vÒ sè dßng ®· bÞ t¸c ®éng bëi mét c©u truy vÊn SQL :INSERT, UPDATE, DELETE tr−íc ®ã theo tham sè link_identifier. NÕu link_identifier kh«ng ®−îc chØ ®Þnh th× m· kÕt nèi tr−íc ®ã sÏ ®−îc chØ ®Þnh. Chó ý : - NÕu c©u lÖnh SQL tr−íc ®ã lµ DELETE mµ kh«ng cã mÖnh ®Ò WHERE th× toµn bé c¸c b¶n ghi trong b¶ng ®· bÞ xo¸ nh−ng hµm mysql_affected_rows() sÏ tr¶ vÒ gi¸n trÞ 0. -Hµm nµy kh«ng cã t¸c dông ®èi víi c©u lÖnh truy vÊn SELECT. §Ó lÊy ®−îc sè dßng tr¶ vÒ (sè dßng ®· bÞ t¸c ®éng) bëi c©u lÖnh SELECT ta dïng hµm mysql_num_rows(). +mysql_result() : lÊy d÷ liÖu tõ result_identifier có ph¸p : mixed mysql_result(int result_identifier, int row, mixed [field]); Trong ®ã : result_identifier lµ m· sè tr¶ vÒ cña hµm mysql_query(), mysql_db_query(), mysql_list_tables(), mysql_list_dbs() . row lµ b¶n ghi mµ ta sÏ lÊy d÷ liÖu field lµ tr−êng trong dßng row mµ ta sÏ lÊy d÷ liÖu . C¸c tham sè result_identifier vµ row ph¶i cã, cßn tham field lµ tïy chän. Hµm sÏ tr¶ l¹i c¸c néi dung cña dßng row vµ cét field tõ tËp kÕt qu¶ ®−îc chØ ®Þnh bëi biÕn result_identifier. NÕu ®èi sè field kh«ng ®−îc chØ ®Þnh râ th× tr−êng tiÕp theo cña b¶n ghi sÏ ®−îc tr¶ vÒ .
  • 46. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 46 VÝ dô: <?php $mysql = “select id, name from ds_thanhvien”; $link = mysql_connect($host, $user, $password); $result = mysql_db_query(“php”, $mysql); echo “ mysql_result($result, 0, “id”) <BR>n”; echo “ mysql_result($result, 0, “name”) <BR>n”; ?> +mysql_free_result() : Hµm gi¶i phãng vïng bé nhí ®−îc liªn kÕt víi result_identifier . có ph¸p: mysql_free_result(int result_identifier) ; Trong ®ã : result_identifier lµ m· sè tr¶ vÒ cña hµm mysql_query(), mysql_db_query(), mysql_list_tables(), mysql_list_dbs() . Hµm nµy chØ ®−îc dïng nÕu nh− b¹n ®¸nh gi¸ thÊy r»ng kÞch b¶n cña b¹n sö dông qu¸ nhiÒu bé nhí khi ®ang ch¹y. Gäi hµm nµy trªn mét tr×nh xö lý kÕt qu¶ sÏ gi¶i phãng toµn bé d÷ liÖu liªn kÕt trong bé nhí . Ngoµi ra cßn c¸c hµm kh¸c: string mysql_tablename (int result_identifier, int i) Hµm tr¶ l¹i tªn cña b¶ng/csdl t¹i chØ sè i trong result_identifier. string mysql_field_name (int result_identifier, int field_index) Hµm tr¶ l¹i tªn cña tr−êng t¹i vÞ trÝ field_index trong m· result_identifier int mysql_list_dbs ([int link_identifier]) Hµm tr¶ l¹i mét result_identifier lµ danh s¸ch biÕn CSDL trªn MySQL Server nÕu thµnh c«ng, lçi tr¶ vÒ false . int mysql_list_tables (string database [, int link_identifier]) Hµm tr¶ vÒ danh s¸ch tÊt c¶ c©c b¶ng trong mét CSDL MySQL, thµnh c«ng tr¶ vÒ mét result identifier, gi¸ trÞ false nÕu cã lçi .
  • 47. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 47 int mysql_list_fields (string database_name, string table_name [, int link_identifier]) Hµm tr¶ vÒ th«ng tin liªn quan ®Õn mét b¶ng d÷ liÖu. int mysql_num_fields (int result_identifier) Tr¶ vÒ sè tr−êng trong tËp kÕt qu¶ . int mysql_num_rows (int result_identifier) Tr¶ vÒ sè b¶n ghi trong tËp kÕt qu¶, hµm nµy chØ cã gi¸ ®èi víi c¸c c©u lÖnh SELECT ,®Ó lÊy l¹i sè b¶n ghi ®−îc tr¶ l¹i tõ c¸c lÖnh :INSERT, UPDATE hoÆc DELETE, dïng mysql_affected_rows(). string mysql_field_type (int result_identifier, int field_index) Hµm tr¶ vÒ kiÓu d÷ liÖu cña tr−êng t¹i vÞ trÝ field_index trong m· result_identifier . int mysql_field_len (int result_identifier, int field_offset) Hµm tr¶ vÒ ®é dµi cña tr−êng ®−îc chØ ®Þnh th«ng qua tham sè field_offset . array mysql_fetch_lengths (int result_identifier) tr¶ vÒ mét m¶ng t−¬ng øng víi c¸c ®é dµi cña mçi tr−êng trong b¶n ghi ®−îc lÊy vÒ bëi hµm mysql_fetch_row() hoÆc false nÕu cã lçi. int mysql_errno ([int link_identifier]) Hµm tr¶ vÒ m· lçi tõ hµm thao t¸c CSDL MySQL tr−íc ,tr¶ vÒ gi¸ trÞ 0 nÕu kh«ng cã lçi . string mysql_error ([int link_identifier]) Hµm tr¶ vÒ x©u th«ng b¸o lçi tõ hµm thao t¸c CSDL MySQL tr−íc, tr¶ vÒ x©u rçng nÕu kh«ng cã lçi . object mysql_fetch_field (int result_identifier [, int field_offset]) LÊy th«ng tin vÒ trêng tõ tËp kÕt qu¶ råi tr¶ l¹i nh mét ®èi t−îng.
  • 48. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 48 XI. Session vµ Cookie 1. Session lµ g× ? HTTP lµ giao thøc kh«ng ®−îc x©y dùng theo c¸ch ®Ó cã thÓ lu gi÷ ®−îc tr¹ng th¸i gi÷a hai lÇn giao dÞch. Khi mét ng−êi dïng yªu cÇu truy nhËp mét trang Web, råi sau ®ã ng−êi dïng nµy l¹i tiÕp tôc yªu cÇu truy nhËp ®èi víi trang Web kh¸c th× HTTP kh«ng thÓ biÕt ®−îc r»ng ®ã lµ hai yªu cÇu tõ cïng mét ng−êi dïng. ý t−ëng cña viÖc ®iÒu khiÓn phiªn lµm viÖc lµ cã thÓ l−u vÕt cña mét ng−êi dïng trong suèt mét phiªn lµm viÖc. NÕu chóng ta lµm ®−îc ®iÒu nµy th× sÏ dÔ dµng cung cÊp mét truy nhËp cho ng−êi dïng, tõ ®ã ta cã thÓ l−u vÕt tr¹ng th¸i cña ng−êi dïng vµ cã thÓ thùc hiÖn viÖc mua b¸n trªn m¹ng. Session trong PHP ®−îc ®iÒu khiÓn bëi mét gi¸ trÞ ID duy nhÊt gäi lµ “sessionID”, gi¸ trÞ nµy sÏ ®−îc tù ®éng sinh ra vµ m· hãa. SessionID ®−îc sinh ra bëi PHP vµ ®−îc l−u tr÷ ë phÝa client trong suèt mét phiªn giao dÞch. Nã cã thÓ ®−îc l−u tr÷ trªn c¸c Cookie ë m¸y ng−êi dïng hay truyÒn lªn c¸c URL. SessionID cã t¸c dông nh− mét kho¸ ®Ó b¹n cã thÓ ®¨ng ký nh÷ng biÕn ®Æc biÖt gäi lµ biÕn session. Néi dung cña nh÷ng biÕn nµy ®−îc chøa trªn Server. SessionID lµ nh÷ng th«ng tin chØ thÊy ®−îc ë phÝa client. NÕu t¹i thêi ®iÓm nµo ®ã cña mét kÕt nèi ®Õn trang Web cña b¹n, sessionID cã thÓ thÊy ®−îc trªn cookie hay URL, b¹n cã thÓ truy nhËp nh÷ng biÕn session chø trªn Server ë phiªn lµm viÖc ®ã. 2) Cookie lµ g× ? Cookie lµ nh÷ng mÈu tin nhá mµ trang script cã thÓ chøa trªn c¸c m¸y kh¸ch (client). B¹n cã thÓ thiÕt lËp mét cookie trªn mét m¸y ng−êi dïng b»ng c¸ch göi mét “HTTP header” cã chøa d÷ liÖu theo d¹ng sau: Set-Cookie:Name=VALUE;[expires=DATE;][path=PATH;] [domain=DOMAIN_NAME;][secure] c©u lÖnh nµy sÏ t¹o ra mét cookie cã tªn gäi lµ NAME víi gi¸ trÞ lµ VALUE. Tr−êng expires sÏ thiÕt lËp ngµy mµ cookie sÏ hÕt hiÖu lùc, path vµ domain cã thÓ ®−îc sö dông ®Ó chØ ®Þnh c¸c URL (n¬i mµ cookie sÏ ®−îc göi ®i). Tõ
  • 49. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 49 kho¸ secure cã nghÜa lµ cookie sÏ kh«ng göi ®i trªn qu¸ mét kÕt nèi HTTP chuÈn. Khi mét browser kÕt nèi tíi mét URL, tríc tiªn nã kiÓm tra c¸c cookie ®· ®−îc l−u tr÷ trªn m¸y. NÕu cã bÊt k× mét cookie nµo cã liªn quan ®Õn ®Þa chØ URL võa ®−îc kÕt nèi, chóng sÏ ®−îc truyÒn trë l¹i cho server. 3) ThiÕt lËp c¸c cookie tõ PHP Ta cã thÓ thiÕt lËp c¸c cookie trong PHP b»ng c¸ch sö dông hµm: int setcookie (string name [,string value [,int expire [,string path [,string domain [, int secure]]]]]); Nh÷ng tham ®èi cña hµm t−¬ng øng víi nh÷ng tham ®èi cña Set-Cookie header ë trªn. NÕu ta thiÕt lËp cookie nh− sau: setcookie ("TestCookie", "Test Value"); th× khi ng−êi dïng ®Õn th¨m trang kÕ tiÕp trong site cña ta (hoÆc reload trang hiÖn t¹i) ta sÏ ph¶i truy nhËp vµo biÕn víi tªn lµ "TestCookie" cã chøa gi¸ trÞ lµ "Test Value", ta chØ cã thÓ truy nhËp tíi nã th«ng qua biÕn m¶ng $HTTP_COOKIE_VARS [] cña PHP . Ta cã thÓ xo¸ mét cookie b»ng c¸ch gäi l¹i hµm setcookie() víi tham ®èi nh− sau: tªn cña cookie lµ tªn cña cookie cÇn xo¸ vµ kh«ng cã tr−êng gi¸ trÞ. 4) Sö dông kÕt hîp cookie víi session §èi víi cookie cã mét sè vÊn ®Ò sau ®©y: Mét vµi webrowser kh«ng thÓ truy cËp ®−îc tíi c¸c cookie (kh«ng hç trî cookie) vµ mét sè ng−êi dïng kh«ng cã c¸c cookie trªn browser cña hä. §©y lµ lý do ®Ó PHP sö dông c¶ hai c¸ch thøc :cookie vµ URL method. Khi sö dông PHP session, ta sÏ kh«ng ph¶i thiÕt lËp c¸c cookie, nh÷ng hµm session sÏ l−u gi÷ nh÷ng th«ng tin nµy cho chóng ta. §Ó xem néi dung cña c¸c cookie ®· ®−îc thiÕt lËp bëi session ta sö dông hµm: session_get_cookie_params(). Hµm nµy sÏ tr¶ vÒ mét m¶ng liªn kÕt mµ c¸c phÇn tö cña m¶ng chøa c¸c th«ng tin nh−: lifetime, path, domain,.. .
  • 50. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 50 §Ó thiÕt lËp c¸c tham sè cho session cookie ta dïng hµm: void session_set_cookie_params (int lifetime [, string path [, string domain]]) 5) L−u gi÷ sessionID PHP sÏ sö dông c¸c cookie mÆc ®Þnh cïng víi session. NÕu cã thÓ ®−îc, mét cookie sÏ ®−îc thiÕt lËp chøa SessionID. Mét c¸ch ®Ó sö dông c¸c SessionID trªn URL ®ã lµ dÞch PHP cïng víi lùa chän –enable-tran-sid. C¸ch n÷a lµ ta cã thÓ ®a sessionID vµo trong thÎ link. SessionID ®−îc chøa trong h»ng SID. §Ó lµm ®−îc ®iÒu nµy, ta thªm vµo cuèi thÎ link h»ng SID ®Ó dïng nã nh− lµ ph−¬ng thøc GET. VÝ dô: <A HREF = “link.php?<?=SID?>”> H»ng SID lµm viÖc ®−îc nh− trªn chØ khi ta cÊu h×nh PHP cïng víi --enable-track-vars. 6) Thùc thi nh÷ng phiªn lµm viÖc ®¬n gi¶n. Nh÷ng b−íc c¬ b¶n cña viÖc sö dông session: + B¾t ®Çu mét Session + §¨ng ký nh÷ng biÕn Session + Sö dông biÕn Session + Huû bá biÕn Session vµ kÕt thóc Session 6.1 B¾t ®Çu mét Session C¸ch ®¬n gi¶n nhÊt ®Ó b¾t ®Çu mét Session lµ dïng hµm: Bool Session_start(); Hµm nµy sÏ kiÓm tra xem ®· cã mét Session ID nµo ®· ®−îc t¹o ra hay ch−a. NÕu ch−a th× nã sÏ t¹o ra mét Session ID, cßn nÕu ®· tån t¹i mét Session ID th× thùc chÊt nã chØ lÊy ra nh÷ng biÕn Session ®Ó ta cã thÓ dïng nã. Hµm tr¶ vÒ gi¸ trÞ TRUE nÕu thµnh c«ng ,ng−îc l¹i tr¶ vÒ gi¸ trÞ FALSE.
  • 51. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 51 Chóng ta còng cã thÓ b¾t ®Çu mét Session b»ng c¸ch cÊu h×nh PHP ®Ó nã tù ®éng b¾t ®Çu khi cã ai ®ã th¨m trang Web cña ta. §iÒu nµy cã thÓ lµm ®−îc nÕu ta chän session. auto_start trong file c:Windowsphp.ini Mét Session còng sÏ ®−îc b¾t ®Çu khi ta ®¨ng ký mét biÕn Session. 6.2 §¨ng ký nh÷ng biÕn Session §Ó cho mét biÕn cã thÓ l−u dÊu th«ng tin tõ mét trang script nµy sang trang script kh¸c, ta cÇn ph¶i ®¨ng ký nã b»ng c¸ch gäi hµm: bool session_register(mixed VarName [,mixed...]); ViÖc ®¨ng ký nµy sÏ l−u tr÷ tªn biÕn vµ ghi gi¸ trÞ cña biÕn cho ®Õn khi phiªn giao dÞch kÕt thóc hoÆc khi ta huû bá (deregister) viÖc ®¨ng ký biÕn ®ã. VÝ dô: §Ó ®¨ng ký biÕn $Var_name ta viÕt nh− sau: $Var_name= 5; session_register(“Var_name”);// kh«ng nªn sö dông ký tù $ trong ®¨ng ký mét biÕn 6.3 Sö dông biÕn Session §Ó ®a mét biÕn Session vµo trong ph¹m vi mµ nã cã thÓ ®−îc sö dông, ta cÇn ph¶i khëi t¹o mét Session b»ng mét trong nh÷ng c¸ch ®· nªu trªn. Sau ®ã, ta cã thÓ truy cËp ®−îc nh÷ng biÕn nµy. NÕu ®· ®¨ng ký biÕn nµy lµ toµn côc b»ng c¸ch sö dông hµm register_global(), th× ta cã thÓ truy nhËp biÕn b×nh th−êng th«ng qua tªn biÕn, vÝ dô : $Var_name ; NÕu kh«ng khai b¸o biÕn lµ toµn côc th× ta ph¶i truy nhËp nh÷ng biÕn Session th«ng qua m¶ng liªn kÕt $HTTP_SESSION_VARS(“Var_name”); §Ó kiÓm tra xem mét biÕn ®· ®−îc ®¨ng ký lµ biÕn Session hay ch−a ta dïng hµm: bool session_is_registered (string name); Hµm nµy tr¶ vÒ gi¸ trÞ TRUE nÕu biÕn ®· ®−îc ®¨ng ký, ng−îc l¹i tr¶ vÒ gi¸ trÞ FALSE. Ta còng cã thÓ kiÓm tra mét biÕn cã lµ biÕn Session b»ng c¸ch kiÓm tra m¶ng liªn kÕt $HTTP_SESSION_VARS() vÒ sù tån t¹i cña biÕn.
  • 52. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 52 6.4 Huû bá biÕn Session vµ kÕt thóc Session Khi muèn kÕt thóc mét biÕn Session, ta cã thÓ huû bá ®¨ng ký cña biÕn ®ã b»ng hµm : bool session_unregister (string name) ; Trong ®ã: name lµ tªn biÕn ta muèn huû ®¨ng ký (tªn nµy kh«ng cÇn cã ký tù $) Hµm tr¶ vÒ gi¸ trÞ TRUE nÕu thµnh c«ng ,ng−îc l¹i tr¶ vÒ gi¸ trÞ FALSE. Hµm nµy chØ cã thÓ huû ®¨ng ký cña mét biÕn Session t¹i mét thêi ®iÓm. §Ó huû tÊt c¶ c¸c biÕn Session hiÖn t¹i, ta dïng hµm: void session _unset ( ) ; §Ó kÕt thóc mét Session ta dïng hµm:s bool session_destroy () ; Hµm nµy sÏ xo¸ ®i SessionID vµ hñy tÊt c¶ nh÷ng d÷ liÖu liªn quan ®Õn Session nµy. Hµm tr¶ vÒ gi¸ trÞ TRUE nÕu thµnh c«ng, ng−îc l¹i tr¶ vÒ gi¸ trÞ FALSE. Ta nªn hñy tÊt c¶ c¸c biÕn Session tr−íc khi kÕt thóc mét Session.
  • 53. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 53 Ch−¬ng III : Ph−¬ng ph¸p Fast Template trong PHP I. C¸c kÜ thuËt mÉu phæ biÕn C¸c mÉu cã thÓ ®−îc dïng nÕu nh− b¹n ®ang thùc hiÖn mét site th−êng xuyªn sö dông l¹i c¸c thµnh phÇn .Trong ph¹m vi cña PHP ,c¸c mÉu ë ®©y ý nãi ®Õn HTML. Kh«ng dïng c¸c mÉu ,mét web site phøc t¹p sÏ cã cÊu tróc rÊt nÆng. §Ó gi¶i quyÕt vÊn ®Ò trªn ,nhiÒu kÜ thuËt mÉu ®· tån t¹i, nhóng cã thÓ h÷u Ých trong mét sè tr−êng hîp. Chóng ta giíi thiÖu qua mét sè kÜ thuËt ®−îc sö dông th−êng xuyªn . Name Code/ HTML mixed HTML structure Defined in PHP Advantages Disadvantages Useful for Embedded PHP Yes Yes Fastand easy Leadsto unreadable scrips, noreuse of existing code,hardto maintain Quick and Smallscripts Separating common parts Yes No Fast and easy, Reuseof certain pasts Leadsto unreadable scripts, often hard to maintain Web sites with LOC < 1000 FastTemplate No No Abstracts HTML completely from coding, easy to adapt to new needs Complex Web sites with LOC > 1000
  • 54. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 54 ViÖc sö dông c¸c mÉu trong c¸c tr×nh øng dông 1. Embedded PHP Chóng ta cã thÓ nhóng c¸c c©u lÖnh PHP vµo trong HTML. Mét vÝ dô ®iÓn h×nh cña c¸ch thøc trªn : <HTML> <HEAD> <TITLE>powers</TITLE> </HEAD> <BODY BGCOLOR=”black” TEXT=”white”> <H1>powers</H1> <TABLE> <TR> <TH>i</TH> <TH>i^i</TH> </TR> <?php for ($i= 0 ; $i< 10 ; $i++) { echo “<TR><TD>$i</TD><TD>”.pow($i,$i).”</TD></TR>n”; } ?> </TABLE> </BODY> </ HTML > Ph−¬ng ph¸p nµy ®−îc dïng kh¸ phæ biÕn víi nh÷ng ng−êi b¾t ®Çu häc lËp tr×nh PHP. Tíi mét lóc nµo ®ã ,nh÷ng ng−êi míi lËp tr×nh b»ng ph−¬ng ph¸p nhóng tiÕn tíi sù thµnh th¹o ë c¸c møc cao h¬n, nh−ng thËt ®¸ng tiÕc, c¸ch lËp tr×nh nµy l¹i ng¨n c¶n ®iÒu ®ã . 2. Separating common parts
  • 55. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 55 MÆc dï kÜ thuËt nµy cã sö dông l¹i c¸c m· code/HTML vµ viÖc thay ®æi còng dÔ dµng h¬n ,nh−ng nã vÉn thõa h−ëng hÇu hÕt c¸c nh−îc ®iÓm cña ph−¬ng ph¸p PHP nhóng . C¸ch lµm th«ng th−êng lµ b¾t ®Çu víi c¸c HTML header vµ footer, chóng ®−îc viÕt thµnh c¸c hµm. C¸c hµm nµy cã thÓ ®−îc gäi khi cÇn ®Õn chóng vµ do ®ã linh ho¹t h¬n khi sö dông. Sù thay ®æi c¸c hµm sÏ ®−îc ph¶n ¸nh trong tÊt c¶ c¸c tr−êng hîp. Ta t¸ch vÝ dô PHP nhóng ë trªn ra hai file . TÖp prepend.inc chøa hai hµm :hiÓn thÞ mét HTML header vµ mét HTML footer . <?php //prepend.inc function CommonHeader($title) { ?> <HTML> <HEAD> <TITLE><?php echo $title ?></TITLE> </HEAD> <BODY BGCOLOR=”black” TEXT=”white”> <H1><?php echo $title ?></H1> <?php } function CommonFooter() { ?> </TABLE> </BODY> </HTML> <?php } ?> TÖp main.php sö dông tÖp prepend.inc
  • 56. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 56 <?php include “prepend.inc”; ?> <?php CommonHeader( “power” ); ?> <TABLE> <TR> <TH>i</TH> <TH>i^i</TH> </TR> <?php for ($i= 0 ; $i< 10 ; $i++) { echo “<TR><TD>$i</TD><TD>”.pow($i,$i).” </TD></TR>n”; } ?> </TABLE> <?php CommonFooter(); ?> 3. FastTemplate Trong phÇn nµy chóng ta cïng t×m hiÓu vÒ ph−¬ng ph¸p thiÕt kÕ Web trong PHP lµ FastTemplate. §©y lµ ph−¬ng ph¸p hay, nã ®−îc g¾n kÌm víi c¸c gãi øng dông cña PHP, nã ®−îc x©y dùng trong tÖp tin cã tªn class. FastTemplate.php . Môc ®Ých cña ph−¬ng ph¸p nµy lµ gióp cho ch−¬ng tr×nh viÕt b»ng PHP cã nhiÒu giao diÖn kh¸c nhau trªn cïng mét c¬ së m·, vµ lµm gi¶m khèi l−îng c«ng viÖc do ch−¬ng tr×nh ®−îc t¸ch ra lµm hai phÇn : phÇn viÕt c¸c ®o¹n m· (code) vµ phÇn thiÕt kÕ giao diÖn cho ch−¬ng tr×nh. PhÇn viÕt c¸c ®o¹n m· sÏ tÝnh to¸n d÷ liÖu vµ thÓ hiÖn trªn c¸c trang HTML th«ng qua c¸c biÕn FastTemplate. PhÇn giao diÖn sÏ thiÕt kÕ giao diÖn cho ch−¬ng tr×nh b»ng ng«n ng÷ HTML. Trong phÇn nµy chóng ta cã thÓ lång vµo trang HTML c¸c ng«n ng÷ nh− Java Applet, JavaScript, ... cho trang web thªm sinh ®éng. ViÖc thªm vµo trang HTML nh÷ng ®o¹n m· nµy kh«ng lµm ¶nh h−ëng tíi phÇn ®o¹n m· PHP. Khi ®ã, ë vÞ trÝ nµo trªn trang web cÇn thÓ hiÖn c¸c kÕt qu¶ tÝnh to¸n tõ ®o¹n m· th× sÏ sö dông c¸c biÕn FastTemplate ®Ó thÓ hiÖn.
  • 57. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 57 II. Ph−¬ng ph¸p FastTemplate 1. BiÕn FastTemplate BiÕn FastTemplate lµ g× ? C¸c biÕn FastTemplate cã cÊu tróc nh− sau : {TEN_BIEN_FASTTEMPLATE} BiÕn ®−îc ®Æt trong dÊu ®ãng më ngoÆc nhän, tªn biÕn ë gi÷a, tªn cã thÓ lµ ch÷ hoa hoÆc ch÷ th−êng. Tuy nhiªn trong phÇn ®o¹n m· PHP b¹n còng ph¶i viÕt gièng nh− vËy. 2. VÞ trÝ ®Æt biÕn FastTemplate C¸c biÕn FastTemplatse cã thÓ ®Æt bÊt kú ®©u trong trang HTML. Nã cã thÓ lµ biÕn thÓ hiÖn th«ng tin trªn c¸c trang HTML khi ®−îc browser hiÓn thÞ hoÆc c¸c biÕn sÏ thªm vµo c¸c ®o¹n m· HTML . VÝ dô : ta ®Æt tªn tÖp lµ : vidu_template.tpl <HTML> <HEAD> <TITLE>{TITLE}</TITLE> </HEAD> <BODY> {CONTENT} </BODY> </HTML> Trong vÝ dô trªn cã hai biÕn FastTemplate lµ {TITLE} vµ {CONTENT}. BiÕn {CONTENT} sÏ thÓ hiÖn th«ng tin trªn trang web khi ®−îc hiÓn thÞ, biÕn {TITLE} ®−îc thªm vµo nh− mét thµnh phÇn cña m· HTML . 3. Mét vÝ dô minh häa Theo vÝ dô trªn chóng ta ®· cã tÖp “vidu_template.tpl”, b©y giê chóng ta ®i x©y dùng ®o¹n script sau :
  • 58. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 58 <?php include “class.FastTemplate.php”; # khai b¸o mét ®èi t−îng thuéc líp FastTemplate $tpl = new FastTemplate(“.”); # §Þnh nghÜa mét b¶n ®å c¸c tÖp FastTemplate $tpl->set_filenames(array(“body” => “vidu_template.tpl ”)); # G¸n c¸c gi¸ trÞ cho biÕn FastTemplate $tpl->assign_vars(array( “TITLE” => “Vi du”, “CONTENT” => “Néi dung cña trang web” )); # Cho hiÖn trang web nµy $tpl->pparse(“body”); ?> 4. Bèn b−íc cho mét trang web . Trong mét script cÇn thùc hiÖn bèn bíc theo thø tù sau : B−íc 1 : Khai b¸o mét ®èi t−îng thuéc líp FastTemplate B−íc 2 : G¸n c¸c tÖp chøa m· HTML (tÖp nµy cã phÇn më réng kh«ng nhÊt thiÕt lµ *.htm) cho c¸c phÇn tö cña m¶ng ®−îc ®Þnh nghÜa bëi ph−¬ng thøc set_filenames() ( b−íc nµy ®−îc gäi lµ “®Þnh nghÜa mét b¶n ®å c¸c tÖp FastTemplate” ) . B−íc 3 : G¸n gi¸ trÞ cho c¸c biÕn FastTemplate trong c¸c tÖp . B−íc 4 : Cho hiÖn trang web b»ng ph−¬ng thøc pparse(“tªn_trang_web”) Chó ý : + B−íc 2: Trong “®Þnh nghÜa mét b¶n ®å c¸c tÖp FastTemplate” cã thÓ nhiÒu tÖp ®−îc g¸n . + B−íc 4: Mçi lÇn gäi ph−¬ng thøc pparse(); chØ ®−îc mét tÖp FastTemplate.
  • 59. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 59 + C¸c b−íc 1,2,3,4 cã thÓ lÆp l¹i nhiÒu lÇn . + Thø tù gäi ph−¬ng thøc pparse(); lµ rÊt quan träng v× nã ¶nh h−ëng ®Õn c¸ch thÓ hiÖn cña trang web. 5. Khèi FastTemplate Th«ng tin trªn trang web cã thÓ ®−îc thÓ hiÖn d−íi d¹ng b¶ng, víi sè hµng kh«ng x¸c ®Þnh do ®ã FastTemplate cã hç trî “khèi FastTemplate”. Khèi FastTemplate sÏ lÆp ®i lÆp l¹i mét ®o¹n HTML nµo ®ã khi ®−îc ®¸nh dÊu khèi. XÐt vÝ dô sau : H·y thùc hiÖn phÐp tÝnh 2a víi a = 1, ..., n. KÕt qu¶ ®−îc thÓ hiÖn bëi mét b¶ng gåm hai cét, cét gi¸ trÞ cña a vµ cét kÕt qu¶ cña phÐp tÝnh 2a . Chóng ta t¹o tÖp “tinh_2_mu.htm” <html> <head> <title>Tinh 2 mu a</title> </head> <body> <table border="1" width="100%"> <tr> <td width="50%"> <p align="center">Gia tri a</td> <td width="50%"> <p align="center">Tinh 2ª</td> </tr> <!-- BEGIN block --> <tr> <td width="50%"> <p align="center">{block.GIATRI}</td> <td width="50%"> <p align="center">{block.KETQUA}</td>
  • 60. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 60 </tr> <!-- END block --> </table> </body> </html> Ta thÊy tÖp nµy t¹o mét b¶ng hai hµng hai cét, hµng trªn lµ tiªu ®Ò cña c¸c cét, hµng d−íi cét thø nhÊt lµ gi¸ trÞ cña a vµ cét thø hai lµ kÕt qu¶ cña phÐp tÝnh 2a . Hµng d−íi ®−îc b¾t ®Çu bëi kho¸ <!-- BEGIN block --> vµ kÕt thóc bëi kho¸ <!-- END block-->. Hai kho¸ nµy cho biÕt phÇn bªn trong sÏ bÞ lÆp (block ë ®©y lµ tªn kho¸), c¸c biÕn FastTemplate bªn trong cã d¹ng {tenkhoa.TEN_BEN}. §o¹n PHP Script sÏ nh− sau : <?php include "class.FastTemplate.php"; $tpl = new FastTemplate("."); $tpl->set_filenames(array( 'tinh_2_mu_a' => 'tinh_2_mu.htm' )); $n = 10; for ($i = 1 ; $i <= $n ; $i++) $tpl->assign_block_vars("block",array( 'GIATRI' => $i, 'KETQUA' => pow(2, $i) )); $tpl->pparse("tinh_2_mu_a"); ?> KÕt qu¶ khi ch¹y ch−¬ng tr×nh nh− h×nh vÏ.
  • 61. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 61 PhÇn II : HÖ C¥ Së D÷ LIÖU MYSQL Ch−¬ng I. Giíi thiÖu Ng«n ng÷ MySQL I. Giíi thiÖu chung MySQL rÊt phøc t¹p, nh−ng giao diÖn SQL trùc gi¸c vµ dÓ häc. Trong ch−¬ng nµy chóng ta m« t¶ kh¸i qu¸t vÒ c¸c lÖnh, c¸c kiÓu d÷ liÖu vµ c¸c hµm mµ chóng ta cÇn biÕn ®Ó sö dông Mysql mét c¸ch cã hiÖu qu¶ vµ cã hiÖu suÊt cao. Ch−¬ng nµy cung cÊp tÊt c¶ c¸c hµm tham kh¶o trong Mysql. §Ó sö dông ch−¬ng nµy cã hiÖu qu¶ b¹n cã thÓ t×m ®Õn hµng lo¹t c¸c b¶ng ®· ®−îc liÖt kª. C¸c −u ®iÓm cña MySQL: • MySQL lµ mét hÖ qu¶n trÞ nhá, b¶o mËt, vµ rÊt dÔ sö dông, th−êng ®−îc sö dông cho c¸c øng dông nhá vµ trung b×nh. Nã ®−îc sö dông cho c¸c øng dông client / server víi m¸y chñ m¹nh nh− UNIX, Windows NT vµ Windows 95/98, vµ ®Æc biÖt trªn m¸y chñ UNIX . • MySQL hç trî c¸c ®iÓm vµo lµ ANSI SQL92 vµ ODBC møc 0-2 SQL chuÈn. • MySQL hç trî nhiÒu ng«n ng÷ cho viÖc th«ng b¸o lçi nh− : Czec, Dutc, English, Estonian, French, German, Hungarian, Italian, Norwegian Nynorsk, Polish, Portuguese, Spanish and Swedish. Ng«n ng÷ ®−îc hç trî mÆc ®Þnh cho d÷ liÖu lµ ISO-8859-1 (Latin1), muèn thay ®æi ph¶i söa trong m· nguån . • Ng«n ng÷ lËp tr×nh sö dông viÕt c¸c hµm API ®Ó th©m nhËp c¬ së d÷ liÖu MySQL cã thÓ lµ C, Perl, PHP.. . • C¸c b¶ng (table) trong c¬ së d÷ liÖu MySQL cã kÝch th−íc rÊt lín vµ ®−îc l−u ë th− môc Datas. KÝch th−íc lín nhÊt cña mét b¶ng tèi thiÓu lµ 4GB vµ nã cßn phô thuéc vµ kÝch th−íc lín nhÊt cña mét file do hÖ ®iÒu hµnh quy ®Þnh .
  • 62. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 62 • C¬ së d÷ liÖu MySQL rÊt dÔ qu¶n lý vµ cã tèc ®é xö lý cao h¬n tíi ba bèn lÇn so víi c¸c hÖ qu¶n trÞ c¬ së d÷ liÖu kh¸c. • MySQL lµ mét hÖ qu¶n trÞ c¬ së d÷ liÖu m« h×nh quan hÖ, nã cã m· nguån më. Nã ®−îc cung cÊp miÔn phÝ trªn c¸c m¸y chñ UNIX, OS/2 vµ c¶ trªn Windows. Bªn c¹nh c¸c −u ®iÓm trªn MySQL còng cã mét vµi nh−îc ®iÓm : • MySQl kh«ng cho phÐp thùc hiÖn c¸c c©u lÖnh SQL select truy vÊn con. VÝ dô : SELECT deptno, ename, sal FROM emp x WHERE sal > (SELECT AVG(sal) FROM emp WHERE x.deptno = deptno) ORDER BY deptno • MySQL kh«ng hç trî Stored Procedures, Triggers, Transactions, Foreign Keys, vµ Views nh− c¸c hÖ qu¶n trÞ c¬ së d÷ liÖu kh¸c . II .CÊu tróc ng«n ng÷ 1. §−a ra mét x©u vµ mét sè nh− thÕ nµo Môc nµy m« t¶ nh÷ng c¸ch kh¸c nhau ®Ó ®−a ra x©u vµ sè trong Mysql. môc nµy còng bao gåm nhiÒu s¾c th¸i vµ ``gotchas'' ®iÒu mµ b¹n cã thÓ gÆp khi ®i s©u vµo c¸c kiÓu c¬ b¶n trong Mysql. 2. X©u X©u lµ mét d·y kÝ tù, ®−îc ®Æt trong dÊu nh¸y ®¬n ‘ ’ hoÆc dÊu nh¸y kÐp “ ” (nÕu ch¹y trong ph−¬ng thøc ANSI th× x©u chØ ®−îc ®Æt trong dÊu nh¸y ®¬n) VÝ dô: ‘trêi n¾ng’. “chµo buæi s¸ng”. Trong mét x©u, cã sù kÕt hîp cña c¸c kÝ tù t¹o nªn c¸c kÝ tù ®Æc biÖt. Mçi kÝ tù ®Æc biÖt nµy b¾t ®Çu b»ng dÊu chÐo ng−îc ( ) ®−îc xem nh− kÝ tù escape . Mysql nhËn biÕt c¸c kÝ tù ®Æc biÖt sau: 0 : kÝ tù 0 trong m· ASCII. ’ : KÝ tù nh¸y ®¬n ‘.
  • 63. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 63 ” : KÝ tù nh¸y kÐp “. b : KÝ tù Backspace. n : KÝ tù xuèng dßng míi. r : KÝ tù vÒ ®Çu dßng . t : NhÈy « (tab). z : KÝ tù 26 trong m· ASCII. KÝ tù nµy cã thÓ ®−îc m· ho¸ ®Ó ®øng ë cuèi file trong Windows. : KÝ tù chÐo ng−îc . % : KÝ tù % . _ : KÝ tù g¹ch d−íi _ . chó ý : nÕu nh− sö dông kÝ tù ‘%’ hoÆc kÝ tù g¹ch d−íi ‘ _’ trong mét sè tr−êng hîp cã thÓ tr¶ vÒ % vµ _ chø kh«ng ph¶i lµ % vµ _ . * cã mét sè c¸ch ®Ó x©u gåm c¶ dÊu nh¸y : - ®Ó mét dÊu nh¸y ®¬n ( ‘ ) n»m trong mét x©u ®−îc ®¸nh dÊu bëi dÊu nh¸y ®¬n th× ph¶i viÕt lµ: ‘ ‘ ’ ’ . - ®Ó mét dÊu nh¸y kÐp ( “ ) n»m trong mét x©u ®−îc ®¸nh dÊu bëi dÊu nh¸y ®¬n th× ph¶i viÕt lµ: ‘ “ ” ’ . - cã thÓ ®Æt kÝ tù (‘’) tr−íc kÝ tù ®¸nh dÊu . - mét dÊu nh¸y ®¬n trong cÆp dÊu nh¸y kÐp ®−a ra x©u chøa dÊu nh¸y ®¬n, mét dÊu nh¸y kÐp trong cÆp dÊu nh¸y ®¬n ®−a ra x©u chøa dÊu nh¸y kÐp. - VÝ dô : mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo',''hello'; ------------------------------------------ | hello | "hello" | ""hello"" | hel'lo | 'hello | ------------------------------------------- mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", ""hello"; ------------------------------------------- | hello | 'hello' | ''hello'' | hel"lo | "hello | ------------------------------------------- mysql> SELECT "ThisnIsnFournlines"; -------------------- | This Is Four lines | --------------------
  • 64. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 64 nÕu b¹n muèn chÌn d÷ liÖu nhÞ ph©n vµo trong cét BLOB. Nh÷ng kÝ tù sau ph¶i ®−îc thÓ hiÖn d−íi d¹ng nh÷ng kÝ tù ®Æc biÖt : - NUL : ASCII 0. ph¶i ®−îc thÓ hiÖn ‘ 0 ’ . - : ASCII 92. dÊu g¹ch ng−îc ph¶i ®−îc thÓ hiÖn ‘ ’ . - ’ :ASCII 39. dÊu nh¸y ®¬n ph¶i ®ù¬c thÓ hiÖn ‘ ’ ’ . - ” : ASCII 34. dÊu nh¸y kÐp ph¶i ®−îc thÓ hiÖn ‘ ” ’. - nÕu biÕt m· C, cã thÓ sö dông hµm CAPI lµ Mysql-escape-string() ®Ó ESC kÝ tù b»ng c©u lÖnh INSERT. - Nªn sö dông hµm ESC ®èi víi nh÷ng x©u chøa kÝ tù ®Æc biÖt ®−îc liÖt kª ë trªn. 3. Sè (Numbers) S« bao gåm sè nguyªn vµ sè thùc . Sè nguyªn ®−îc biÓu diÔn b»ng mét d·y sè. Cßn sè thùc sö dông dÊu chÊm ®Ó ph©n c¸ch phÇn thËp ph©n . DÊu g¹ch d−íi ®ù¬c ®Æt tr−íc sè ®Ó chØ sè ©m. VÝ dô: 1221 0 32 VÝ dô cho sè thùc: 94.42 32032.6809e10 48.00 chó ý : sè nguyªn ®−îc sö dông trong ng÷ c¶nh sè thùc ®−îc chuyÓn thµnh sè thùc cã gi¸ trÞ ngang b»ng vÝ dô : float 0 0.0 float 56 -> 56.0 Nh÷ng gi¸ trÞ hÖ Hexa (hÖ 16) Mysql hç trî c¸c gi¸ trÞ hÖ Hexa. Trong ng÷ c¶nh sè th× chóng gièng nh− mét sè nguyªn. Trong ng÷ c¶nh x©u th× chóng gièng nh− mét x©u nhÞ ph©n mµ mçi cÆp sè nguyªn Hexa ®−îc chuyÓn thµnh mét kÝ tù . VÝ dô: mysql> SELECT x'FF' -> 255 mysql> SELECT 0xa0; -> 10 mysql> select 0x5061756c; -> Paul
  • 65. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 65 ë vÝ dô trªn khi viÕt mét sè d−íi d¹ng Hexa b¹n ph¶i ®iÒn vµo vµo tr−íc sè ®ã chuçi ‘x’ hoÆc ‘0x’. Có ph¸p x ‘x©u Hexa’ dùa trªn ANSISQL, vµ có ph¸p 0x dùa trªn ODBC. X©u hÖ Hexa th−êng sö dông ODBC ®Ó ®−a gi¸ trÞ cho cét BLOB Cã thÓ chuyÓn mét x©u hoÆc sè thµnh hÖ Hexa b»ng hµm HEX(). 4. Gi¸ trÞ NULL Gi¸ trÞ NULL cã nghÜa lµ “kh«ng cã d÷ liÖu”(“no data”) kh¸c víi gi¸ trÞ 0 ®èi víi kiÓu sè vµ x©u rçng ®èi víi kiÓu x©u . Trong khu«n d¹ng xuÊt hoÆc nhËp File d÷ liÖu NULL cã thÓ ®−îc thÓ hiÖn b»ng ‘N’ (nh− LOAD DATA INFILE, SELECT...INTO OUTFILE). 5. Tªn cña C¬ së d÷ liÖu, b¶ng, chØ sè cét vµ bÝ danh Tªn cña c¬ së d÷ liÖu, b¶ng, chØ sè cét vµ bÝ danh tÊt c¶ ®Òu tu©n theo mét qui luËt chung trong Mysql. Nh−ng chó ý r»ng qui luËt nµy ®· ®−îc thay ®æi b¾t ®Çu víi Mysql Version 3.23.6 khi chóng ta d−a vµo lêi chó thÝch cho viÖc nhËn biÕt c¬ së d÷ liÖu, b¶ng vµ tªn cét víi dÊu ‘ ‘ ’ ’ .’ ” ’sÏ lµm viÖc nhËn ra lêi chó thÝch nÕu b¹n ch¹y trong chÕ ®é ANSI . §Þnh danh (Identifier) §é dµi C¸c kÝ tù cho phÐp Database (c¬ së d÷liÖu) 64 TÊt c¶ c¸c kÝ tù cho phÐp trong th− môc ngo¹i trõ ‘/’ vµ ‘.’ Table (B¶ng) 64 TÊt c¶ c¸c kÝ tù cho phÐp víi tªn File ngo¹i trõ ‘/’ vµ ‘.’ Column (Cét) 64 Cho phÐp tÊt c¶ c¸c kÝ tù Alias (BÝdanh) 256 Cho phÐp tÊt c¶ c¸c kÝ tù Chó ý: ë b¶ng trªn ®Þnh danh kh«ng thÓ cã kÝ tù ®¸nh dÊu, ASCII(0) hoÆc ASCII(255) . NÕu ®Þnh danh lµ mét tõ bÞ h¹n chÕ hoÆc trong ®ã cã chøa c¸c kÝ tù ®Æc biÖt th× b¹n ph¶i sö dông dÊu nh¸y ®¬n ®Ó chó thÝch khi sö dông chóng . VÝ dô: SELECT * from `select` where `select`.id > 100; Trong phiªn b¶n tr−íc cña Mysql, luËt ®Æt tªn nh− sau :
  • 66. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 66 - Mét tªn gåm c¸c kÝ tù trong b¶ng m·, còng cho phÐp kÝ tù g¹ch d−íi ‘_’ vµ ‘$’. - Tªn cã thÓ b¾t ®Çu bëi tÊt c¶ c¸c kÝ tù hîp ph¸p, trong thùc tÕ tªn cã thÓ b¾t ®Çu b»ng mét sè (®iÒu nµy kh¸c nhiÒu víi hÖ c¬ së d÷ liÖu )tuy nhiªn tªn kh«ng chØ gåm mét sè . - Kh«ng ®−îc sö dông kÝ tù ‘.’ Trong tªn bëi v× kÝ tù ®ã ®−îc sö dông ®Ó më réng khu«n d¹ng ®Ó truy nhËp ®Õn cét (xem ë b¶ng d−íi ®©y). Chóng ta kh«ng nªn dïng nh÷ng tªn nh− 1e bëi v× mét biÓu thøc nh− 1e1th× rÊt m¬ hå, nã cã thÓ ®−îc biªn dÞch lµ mét biÓu thøc 1e1 hoÆc lµ sè 1e1. Trong Mysql ta cã thÓ liªn hÖ tíi mét cét b»ng viÖc sö dông nh÷ng c¸ch sau: Cét tham chiÕu ý nghÜa Col_name Cét col_name tõ b¶ng sö dông trong c©u truy vÊn chøa cét víi tªn nµy. Tbl_name.col_name Cét col_name tõ b¶ng tbl_name cña c¬ së d÷ liÖu hiÖn thêi . Db_name.tbl_name. col_name Cét col_name tõ b¶ng tbl_name cña c¬ së d÷ liÖu Db_name. ‘column_name’ Mét cét cã chøa kÝ tù ®Æc biÖt hoÆc tõ kho¸ B¹n cÇn ph¶i chØ râ tbl_name hoÆc db_name.tbl_name ®èi víi nh÷ng cét cã cïng tªn trong nhiÒu b¶ng cña c¬ së d÷ liÖu, hoÆc b¶ng cã cïng tªn trong c¸c c¬ së d÷ liÖu kh¸c nhau ®Ó tr¸nh sù nhËp nh»ng . VÝ dô : gi¶ sö mçi b¶ng T1 ,T2 chø mét cét C b¹n cã thÓ lÊy C trong mét lÖnh SELECT sö dông c¶ T1 vµ T2. Trong tr−êng hîp nµy C nhËp nh»ng bëi v× nã kh«ng duy nhÊt gi÷a c¸c b¶ng ®−îc sö dông trong c©u lÖnh. B¹n ph¶i chØ ra tªn b¶ng b»ng c¸ch viÕt T1.C hoÆc T2.C. t−¬ng tù nÕu b¹n lÊy tõ mét b¶ng T trong c¬ së d÷ liÖu DB1 vµ tõ b¶ng T trong c¬ së d÷ liÖu DB2, b¹n ph¶i tham chiÕu ®Õn cét trong nh÷ng b¶ng ®ã nh− sau : DB1.T.col_name vµ DB2.T.col_name. Có ph¸p .Tbl_name cã nghÜa lµ b¶ng Tbl_name n»m trong c¬ së d÷ liÖu hiÖn thêi .có ph¸p nµy ®−îc chÊp nhËn cho t−¬ng thÝch ODBC bëi v× mét sè ch−¬ng tr×nh ODBC thªm vµo ®Çu tªn b¶ng mét dÊu chÊm ‘.’ 6. Ph©n biÖt ch÷ hoa vµ ch÷ th−êng ®èi víi tªn trong Mysql :
  • 67. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 67 Trong Mysql tªn c¬ së d÷ liÖu, b¶ng trong Windows th× kh«ng ph©n biÖt ch÷ hoa vµ ch÷ th−êng, cßn trong Unix th× cã ph©n biÖt ch÷ hoa vµ ch÷ th−êng . Chó ý : mÆc dï trong windows kh«ng ph©n biÖt ch÷ hoa vµ ch÷ th−êng, b¹n còng kh«ng nªn dïng tªn c¬ së d÷ liÖu, b¶ng víi c¸c tr−êng hîp kh¸c nhau trong cïng mét c©u truy vÊn . VÝ dô : mysql> SELECT * FROM my_table WHERE MY_TABLE.col=1; c©u lÖnh trªn sÏ kh«ng thùc hiÖn ®−îc . Tªn cét kh«ng ph©n biÖt ch÷ hoa vµ ch÷ th−êng trong tÊt c¶ c¸c tr−êng hîp . BÝ danh trªn b¶ng ph©n biÖt ch÷ hoa vµ ch÷ th−êng VÝ dô: mysql> SELECT col_name FROM tbl_name AS a WHERE a.col_name = 1 OR A.col_name = 2; C©u lÖnh trªn sÏ kh«ng thùc hiÖn ®−îc v× bÝ danh ph©n biÖt ‘a’ vµ ‘A’ BÝ danh trªn cét sÏ kh«ng ph©n biÖt ch÷ hoa vµ ch÷ th−êng. NÕu b¹n muèn truy vÊn thùc hiÖn ®−îc trªn b¶ng th× chÊp nhËn mét qui −íc lu«n lu«n t¹o ra tªn c¬ së d÷ liÖu vµ tªn b¶ng sö dông ch÷ th−êng. Mét c¸ch tr¸nh vÊn ®Ò nµy lµ sÏ b¾t ®Çu mysql víi -0 lower_case_table_names = 1, Theo mÆc ®Þnh tïy chän nµy lµ 1 trªn Windows vµ 0 trªn Unix. NÕu lower_case_table_names lµ 1 MySQL sÏ chuyÓn ®æi tÊt c¶ c¸c tªn b¶ng vÒ ch÷ th−êng ,Chó ý r»ng nÕu b¹n thay ®æi tïy chän nµy, b¹n cÇn tr−íc hÕt chuyÓn ®æi nh÷ng tªn b¶ng cò cña b¹n vÒ ch÷ th−êng tr−íc khi b¾t ®Çu mysql. 7. BiÕn ng−êi sö dông Mysql hæ trî c¸c biÕn riªng cïng víi có ph¸p @variable name. Tªn biÕn bao gåm kÝ tù anpha t− tËp c¸c kÝ tù vµ thªm vao kÝ tù ‘_’, ’$’, vµ ‘.’ BiÕn kh«ng ph¶i khëi t¹o, NULL kh«ng xuÊt hiÖn trong biÕn, biÕn cã thÓ chøa sè nguyªn thùc hoÆc gi¸ trÞ x©u. TÊt c¶ c¸c biÕn sÏ tù gi¶i phãng vïng nhí khi chóng tho¸t ra. B¹n cã thÓ g¸n biÓu thøc vµo biÕn theo có ph¸p : @variable:=expr VÝ dô: select @t1:=(@t2:=1)@t3:=4,@t1,@t2,@t3; ------------------------------------------------ | @t1:=(@t2:=1)@t3:=4 | @t1 | @t2 | @t3 | ----------------------------------------------- | 5 | 5 | 1 | 4 | ------------------------------------------------ chóng ta ph¶i sö dông có ph¸p:= ®Ó g¸n biÕn, bëi v× dÊu b»ng (= ) ®−îc sö dông ®Ó so s¸nh .
  • 68. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 68 biÕn cã thÓ ®−îc sö dông trong mét biÓu thøc l−u ý r»ng ®iÒu nµy kh«ng ®−îc sö dông trong ng÷ c¶nh mét sè ®−îc yªu cÇu râ rµng nh− trong mÖnh ®Ò LIMIT cña lÖnh select hoÆc mÖnh ®Ò IGNORE number LINES cña lÖnh LOAD DATA . chó ý : trong lÖnh SELECT mçi biÓu thøc chØ nhËn mét gi¸ trÞ khi nã ®−îc göi cho ng−êi dïng. §iÒu nµy còng ®óng trong mÖnh ®Ò HAVING, GROUP BY, ORDER BY. B¹n kh«ng thÓ tham chiÕu tíi mét biÓu thøc gåm tËp hîp c¸c biÕn trong SELECT. VÝ dô: SELECT (@aa:=id) AS a, (@aa3) AS b FROM table_name HAVING b=5; C©u lÖnh trªn kh«ng thùc hiÖn ®−îcbëi v× @aa sÏ kh«ng chøa gi¸ trÞ ë hµng hiÖn t¹i trõ phi gÝ trÞ cña id thay cho cét ®· ®−îc chÊp nh¹n tr−íc . 8. C¸c dßng chó thÝch Mysql cho phÐp chÌn c¸c c©u chó thÝch vµo trong kÞch b¶n cña Mysql, khi thùc hiÖn tr×nh th«ng dÞch sÏ bá qua tÊt c¶ c¸c ®o¹n v¨n b¶n lµ c©u chó thÝch Trong Mysql chó thÝch ®−îc ®Æt sau dÊu : # dßng chó thÝch -- dßng chó thÝch c¸ch viÕt nµy chØ cã t¸c dông trªn mét dßng . dïng cÆp kÝ hiÖu sau : /* ....*/ ®Ó chÌn c¸c c©u chó thÝch, lo¹i chó thÝch nµy ®−îc gäi lµ chó thÝch khèi . vÝ dô: mysql> select 11; # chó thÝch trªn mét dßng mysql> select 11; -- chó thÝch trªn mét dßng mysql> select 1 /* chó thÝch khèi*/ 1; mysql> select 1 /* chó thÝch trªn nhiÒu dßng chó thÝch khèi */ 1; l−u ý r»ng chó thÝch – yªu cÇu b¹n ph¶i cã Ýt nhÊt mét dÊu c¸ch sau --! MÆc dï vËy cã vµi h¹n chÕ trong c¸ch ghi chó *..* ®ã lµ: - kÝ tù nh¸y ®¬n vµ nh¸y ®«i dïng ®Ó chØ sù b¾t ®Çu cña mét x©u thËm chÝ sö dông bªn trong mét chó thÝch nÕu trong chó thÝch dÊu nh¸y thø nhÊt kh«ng phï hîp víi dÊu nh¸y thø hai th× hÖ ph©n tÝch sÏ kh«ng nhËn ra ®iÓm kÕt thóc cña ghi chó. - dÊu chÊm phÈy ( ; ) ®−îc dïng ®Ó b¸o kÕt thóc cña mét c©u lÖnh Mysql vµ sau dÊu ( ; ) lµ sù b¾t ®Çu cña c©u lÖnh tiÕp theo.
  • 69. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 69 Ch−¬ng II. C¸c thµnh phÇn cña My SQL Trong phÇn nµy chóng ta giíi thiÖu kh¸i qu¸t vÒ c¸c kiÓu d÷ liÖu cña c¸c tr−êng va c¸c thuéc tÝnh vÒ kiÓu trong mçi lo¹i d÷ liÖu.Sau ®ã lµ mét sè kiÓu b¶ng trong MySQL vµ cuèi cïng lµ mét sè hµm c¬ b¶n ®−îc cung cÊp bëi MySQL. I. C¸c kiÓu d÷ liÖu Trong MySQL cã c¸c kiÓu d÷ liÖu sau: KiÓu sè KiÓu kÝ tù (char,varchar,Blob,Text,Enum,Set) KiÓu x©u. KiÓu ngµy giê (Datetime,Date,TimeStamp,Time,year) 1. KiÓu sè KiÓu tinyint: Khai b¸o TINYINT[Cm] [UNSGNED] [ZEROFIU].§©y lµ kiÓu sè nguyªn víi gi¸ trÞ rÊt nhá: -NÕu khai b¸o víi tõ kho¸ nusigned th× gi¸ trÞ mµ cét cã kiÓu nµy cã thÓ n»m trong kho¶ng 0 ®Õn 255. -NÕu kh«ng cã tõ khãa nusiged th× gi¸ trÞ trong kho¶ng –128 ®Õn 127 KiÓu Smallint Khai b¸o:Smallint [Cm] [nusiged] [zerofill].§©y lµ kiÓu sè nguyªn cã gi¸ trÞ nhá: -NÕu lµ sè cã dÊu th× gi¸ trÞ n»m trong kho¶ng-32768 ®Õn 32767 -NÕu lµ sè kh«ng dÊu th× gi¸ trÞ trong kho¶ng 0 ®Õn 65536. KiÓu Mediumint Khai b¸o :Mediumint [cm] [nusiged] [zerofill] [(m)] -NÕucã dÊu th× gi¸ trÞ n»m trong kho¶ng –8388608 ®Õn 8388607. -NÕu lµ sè cã dÊu th× gi¸ trÞ n»m trong kho¶ng 0 ®Õn 16777215. KiÓu Int: Khai b¸o:Int:[Cm] [nusiged] [zerofill] -Víi sè cã dÊu gi¸ trÞ trong kho¶ng –2147483648 ®Õn 2147483647 -Víi sè kh«ng dÊu gi¸ trÞ trong kho¶ng 0 ®Õn 429467295 KiÓu Interger Khai b¸o:interger [Cm] [nusiged] [zerofill].T−¬ng tù kiÓu INT.
  • 70. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 70 KiÓu Bigint Khai b¸o :Bigint [Cm] [nusiged] [zerofill].§©y lµ kiÓu nguyªn mµ gi¸ trÞ lµ rÊt lín. -Víi sè cã dÊu gi¸ trÞ trong kho¶ng –9223372036854775808 ®Õn 9223372036854775807. -Víi sè kh«ng dÊu gi¸ trÞ trong kho¶ng 0 ®Õn 18446744073709551615 Note:tÊt c¶ c¸c phÐp to¸n sè häc sö dông sè cã dÊu bigint hoÆc double, v× vËy kh«ng sö dông sè kh«ng dÊu ,mµ gi¸ trÞ v−ît qu¸ sè nguyªn lín tøc lµ nÕu nh©n hai sè nguyªn lín th× gi¸ trÞ tr¶ vÒ sÏ v−ît qu¸ sè nguyªn lín cã dÊu. KiÓu float: Khai b¸o:float (precision)[zerofill].§èi víi sè thùc ®é chÝnh x¸c ®¬n th× ®é chÝnh x¸c <24.§èi víi sè thùc ®é chÝnh x¸c kÐp th× ®é chÝnh x¸c <255.Float(x) gièng kiÓu double,float nh−ng cì vµ sè ch÷ sè phÇn thËp ph©n ch−a ®−îc ®Þnh nghÜa Precision:sè ch÷ sè phÇn thËp ph©n mµ float cã thÓ nhËn.Float [Cm,d] [zerofill]:®©y lµ sè thùc víi ®é chÝnh x¸c kÐp víi m hiÓn thÞ ®é réng,d lµ sè c¸c ch÷ sè phÇn thËp ph©n. NÕu dïng float kh«ng cã ®èi hoÆc ®èi <=24,th× t−¬ng øng dïng sè thùc cã ®é chÝnh x¸c ®¬n. Double [(Cm,d)] [zerofill]:sè thùc víi ®é chÝnh x¸c kÐp víi m lµ ®é réng, d lµ sè ch÷ sè phÇn thËp ph©n.Nõu dïng double kh«ng ®èi hoÆcdïng float(x) víi 25<=x<=53 thay cho mét sè thùc ®é chÝnh x¸c kÐp. Double precision [(Cm,d)][zerofill] Real [(Cm,d)][zerofill] .t−¬ng tù nh− sè double. Decimal [(Cm,d)][zerofill] ®−îc coi nh− mét kiÓu char,®−îc l−u tr÷ nh− mét x©u mçi kÝ tù lµ mét kÝ sè cña gi¸ trÞ cÇn l−u tr÷. Nuneric [(Cm,d)][zerofill] t−¬ng tù decimal. 2.KiÓu ngµy giê 2.1 Datime, Date, TimeStamp. C¸c kiÓu Datime, Data, TimeStamp cã nh÷ng ®Æc tr−ng riªng nh−ng còng cã mèi liªn quan. Cã mét sè Y2K chóng ta ®· tõng biÕn ®æi víi c¸c kiÓu thêi gian kh«ng gian râ rµng trªn MySQL ®· gi¶i thÝch c¸c ngµy cïng víi gi¸ trÞ n¨m mËp mê theo quy luËt sau: -Gi¸ trÞ n¨m trong kho¶ng 70-69 ®−îc chuyÓn sang n¨m 2000-
  • 71. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 71 2069 -Gi¸ trÞ n¨m trong kho¶ng 70-99 ®−îc chuyÓn sang n¨m 1970- 1999. §ã lµ v× gi¸ trÞ n¨m ta chØ ®Ó hai ch÷ sè, cßn hai sè tr−íc mÆc ®Þnh lµ n¨m 1900.§Ó lµm cho kh«ng nhÇm lÉn n¨m th× ph¶I cung cÊp gi¸ trÞ n¨m lµ bèn sè.MySQL ®· lµm ®iÒu nµy. KiÓu datetime: §©y lµ kiÓu ngµy giê ®−îc dïng khi b¹n cÇn l−u tr÷ th«ng tin c¶ vÒ ngµy th¸ng vµ thêi gian.Gi¸ trÞ cña nã n»m trong kho¶ng 1000-01-10:00:00 ®Õn ‘9999-12-3123:59:59’ MySQL hiÓn thÞ datatime theo ®Þnh d¹ng: “yyyy-mm-dd hh:mm:ss” nh−ng nã còng cho phÐp Ên ®Þnh gi¸ trÞ cho kiÓu nµy b»ng d¹ng sè hoÆc x©u. KiÓu Date ®−îc dïng khi b¹n chØ cÇn l−u tr÷ gi¸ trÞ ngµy th¸ng. MySQL truy xuÊt vµ hiÓn thÞ gi¸ trÞ DATE víi ®Þnh d¹ng “yyyy- mm-dd” Gi¸ trÞ trong kho¶ng ‘1000-01-01’ ®Õn ‘9999-12-31’cã thÓ Ên ®inh b»ng sè hoÆc x©u. KiÓu TIMESTAMP [Cm] Cung cÊp 1 kiÓu mµ b¹n cã thÓ dïng ®Ó ®¸nh dÊu mét c¸ch tù ®éng ®èi víi phÐp INSERT hoÆc UPDATE cïng víi ngµy giê hiÖn t¹i.NÕu cã nhiÒu cét TIMESTAMP th× chØ cét ®Çu tiªn ®−îc cËp nhËt mét c¸ch tù ®éng. §Ó cËp nhËt vµo cét ®Çu nh− vËy còng ph¶i tho¶ m·n c¸c ®iÒu kiÖn sau: -Cét mµ chøa ®−îc x¸c ®Þnh chi tiÕt trong mÖnh ®Ò INSERT hoÆcLOADDATAINFILE -Cét mµ kh«ng x¸c ®Þnh chi tiÕt trong lÖnh UPDATE vµ mét sè cét kh¸c ®· thay ®æi gi¸ trÞ -B¹n ®Æt chi tiÕt cét TIMESTAMP lµ ngµy giê hiÖn t¹i b»ng c¸ch Ên ®Þnh gi¸ trÞ NULL C¸c cét kh¸c cã thÓ ®−îc ®Æt thêi gian vµ ngµy th¸ng hiÖn t¹i.ChØ cµ víi cét gi¸ trÞ NULL hoÆc NOW.Gi¸ trÞ cña TIMESTAMP lµ tõ 1970- 01-01:00:00:00.§Õn n¨m 2037 th× MySQL hiÓn thÞ TIMESTAMP theo ®Þnh d¹ng ‘yyyy mm dd hh mm ss’ ‘yyyy mm dd hh mm ss’.MySQL còng cho phÐp sö dông b»ng x©u hoÆc sè. KiÓu TIME MySQL ®Þnh d¹ng gi¸ trÞ thêi gian lµ ‘hh:mm:ss’ hoÆc HHH:MM:SS Nguyªn nh©n mµ phÇn giê cã thÓ lín h¬n t¹i v× kiÓu TIME kh«ng chØ biÓu diÔn thêi gian trong 1ngµy (giê ph¶i <24) mµ nã cßn lµ kho¶ng thêi gian gi÷a hai sù kiÖn (cã thÓ >24 hoÆc thËm chÝ lµ ©m).Gi¸ trÞ cña
  • 72. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 72 nã trong kho¶ng ‘-838:59:59’ tíi ‘838:59:59’ KiÓu YEAR Cã thÓ ®Þnh d¹ng bëi hai hoÆc bèn ch÷ sè, gi¸ trÞ n»m trong kho¶ng 1901 ®Õn 2155 víi bèn ch÷ sè. Víi hai sè th× mÆc ®Þnh tõ 00-69 lµ 2000-2069 ,70 ®Õn 99 lµ 1970- 1999 3.KiÓu kÝ tù (String) KiÓu char: §é dµi cét char lµ cè ®Þnh khi b¹n t¹o b¶ng. Gi¸ trÞ ®é dµi trong kho¶ng 0-255 nÕu sè kÝ tù ®iÒn vµo nhá h¬n ®é dµi quy ®Þnh th× nã sÏ tù ®éng ®iÒn vµo kÝ tù trèng. Trong MySQL kiÓu char cho phÐp b¹n t¹o mét cét cã d¹ng char(0),®iÒu nµy còng thuËn tiÖn trong tr−êng hîp b¹n ph¶i tu©n theo víi sè phÇn mÒm cò nã phô thuéc vµ sù tån t¹i cña mét cét mµ kh«ng thùc sù cÇn sö dông gi¸ trÞ. Còng tèt trong tr−êng hîp b¹n cÇn ®Þnh nghÜa mét cét sao cho nã cã thÓ nhËn hai gi¸ trÞ mét cét khai b¸o char(0) nã cã thÓ chiÕm mét bit vµ cã thÓ nhËn hai gi¸ trÞ NULL hoÆc “ ” KiÓu Varchar [national] varchar(m)[binary]. §©y lµ cét ®−îc khai b¸o víi mét x©u cã ®é dµi kh«ng cè ®Þnh nh÷ng kÝ tù trèng sÏ ®−îc huû khi l−u tr÷ gi¸ trÞ, m n»m trong kho¶ng 1-255. value Char(4) Storage require d Varchar Storage require d ’ ‘ ‘ ’ 4bytes ‘ ’ 1bytes ‘ab’ ‘ab’ 4bytes ‘ab’ 3bytes ‘abcd’ ‘abcd’ 4bytes ‘abcd’ 5bytes ‘abcdefgh’ ‘abcd’ 4bytes ‘abcd’ 5bytes KiÓu Blob vµ TEXT -BLOB lµ ®èi t−îng nhÞ ph©n lín cã thÓ chøa l−îng rÊt lín c¸c d÷ liÖu víi 4 kiÓu BLOB:TINYBLOB, BLOB, MEDIUMBLOB vµ LONGBLOB.Cã 4 kiÓu TEXT lµ TINYTEXT,TEXT, MEDIUMTEXT, vµ LONGTEXT TINYBLOB,TINYTEXT:cã ®é réng tèi ®a lµ255 Blob vµ Text ®é dµi tèi ®a lµ 65535 kÝ tù. Mediumblob,mediumtext:®é dµi tèi ®a 16777125 kÝ tù. Longblob,longtext: ®é dµi tèi ®a 424967295 kÝ tù.
  • 73. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 73 Chó ý: M« h×nh client/server giíi h¹n bëi 16Mb. Mét gãi giao tiÕp trªn mét hµng nªn kh«ng thÓ sö dông toµn bé ph¹m vi cña kiÓu nµy. KiÓu ENUM(value1,value2,..)(kiÓu liÖt kª). Mét ®èi t−îng x©u chØ cã thÓ cã 1 gi¸ trÞ chän tõ mét danh s¸ch c¸c gi¸ trÞ ‘’value1”,”value2”,..null hoÆc kÝ tù ®Æc biÖt. Mét kiÓu liÖt kª cã gi¸ trÞ lín nhÊt lµ 65535 gi¸ trÞ. KiÓu tËp hîp set(value1,value2,..) mét ®èi t−îng x©u cã thÓ nhËn 0 hoÆc nhiÒu h¬n mçi lo¹i cã thÓ chän tõ danh s¸ch c¸c gi¸ trÞ :”value1”,”value2”, .. Mét tËp hîp cã tèi ®a 64 thµnh phÇn. Gi¸ trÞ null nghÜa lµ kh«ng cã d÷ liÖu,nã kh¸c gi¸ trÞ 0 vµ x©u rçng. Gi¸ trÞ null cã thÓ ®−îc kÝ hiÖu bëi n cho viÖc truy xuÊt file d¹ng text. 4 .Cét chØ sè. TÊt c¶ c¸c kiÓu cét cña MySQL cã thÓ ®−îc chØ sè ho¸ .ViÖc dïng chØ sè ho¸ trªn c¸c cét cã liªn quan víi nhau lµ c¸ch tèt nhÊt ®Ó c¶i tiÕn viÖc thùc hiÖn cña c©u lÖnh Select. Mét b¶ng cã thÓ cã tíi 16 cét chØ sè, ®é dµi chØ sè tèi ®a lµ 256 bytes ,mÆc dï cã thÓ thay ®æi khi biªn dÞch MySQL. §èi víi cét kiÓu char vµ varchar b¹n cã thÓ chØ sè ho¸ phÇn ®Çu cña cét.Nh− vËy sÏ nhanh h¬n vµ cÇn Ýt kh«ng gian ®Üa h¬n lµ chØ sè ho¸ trong c¶ cét.Có ph¸p dïng trong mÖnh ®Ò CREATE TABLE nh− sau: KEY index_name(colname(length)). VÝ dô sau sÏ t¹o mét chØ sè ho¸ cho 10 kÝ tù ®Çu cña cét tªn: MySQL>CREATE TABLE test( Name char(200)not NULL KEY index_name(name(10))) §èi víi cét kiÓu BLOB vµ TEXT, b¹n ph¶i chØ sè ho¸ mét phÇn ®Çu cña cét, kh«ng thÓ chØ sè ho¸ c¶ cét ®−îc. T¹o chØ sè trªn nhiÒu cét. MySQL cã thÓ t¹o chØ sè trªn nhiÒu cét. Mét viÖc chØ sè ho¸ cã thÓ lªn tíi 15 cét(trªn cét char vµ varchar b¹n cã thÓ chØ sè ho¸ phÇn ®Çu cña cét nh− mét phÇn cña viÖc chØ sè ho¸). ViÖc chØ sè ho¸ nhiÒu cét ®−îc xem nh− mét m¶ng ®−îc s¾p xÕp mµ chøa c¸c gi¸ trÞ ®−îc t¹o bëi viÖc kÕt nèi c¸c gi¸ trÞ gi÷a c¸c cét ®−îc chØ sè ho¸ . Mysql sö dông chØ sè ho¸ nhiÒu cét nh− lµ c¸ch ®Ó truy vÊn nhanh h¬n khi b¹n ®· x¸c ®Þnh ®−îc sè l−îng lín th«ng tin cña cét ®Çu tiªn cña s¾p xÕp trong mét c©u lÖnh WHERE, thËm chÝ nÕu b¹n
  • 74. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 74 kh«ng x¸c ®Þnh gi¸ trÞ ®èi víi c¸c cét kh¸c th× th«ng tin lÊy ®−îc vÉn chÝnh x¸c . VÝ dô : Mysql> CREATE TABLE test( Id int NOT NULL, Last_name char(30)NOT NULL, First_name char(30)NOT NULL, PRIMARY KEY(id), INDEX name(Last_name, First_name); Khi ®ã tªn sÏ ®−îc chØ sè th«ng qua 2 cét Last_name, First_name. ViÖc chØ sè sÏ ®−îc ¸p dông cho viÖc truy vÊn ®Õn c¸c gi¸ trÞ cô thÓ ®ã trong ph¹m vi cña cét last_name hoÆc c¶ Last_name vµ First_name. Do ®ã, cét tªn sÏ ®−îc dïng trong truy vÊn d−íi ®©y: Mysql>SELECT* FROM test WHERE last_name=”Lan”; Mysql>SELECT* FROM test WHERE last_name=”Lan” AND first_name=”NguyÔn”; Mysql>SELECT* FROM test WHERE last_name=”Lan” AND(first_name=”NguyÔn”)OR(first_name=”Lª”) Mysql>SELECT* FROM test WHERE last_name=”Lan”; AND(first_name>=”L”)AND(first_name<=”M”) Tuy nhiªn cét tªn sÏ kh«ng ®−îc dïng trong truy vÊn d−íi ®©y : Mysql>SELECT* from test WHERE last_name=”Lan” Mysql>SELECT* from test WHERE last_name=”Lan” OR(first_name=”NguyÔn”) Sö dông c¸c kiÓu cét tõ nh÷ng bé m¸y CSDL kh¸c §©y lµ c¸ch t¹o ra mét c¸ch dÔ dµng cã sö dông m· SQL cho c¸c hÖ qu¶n trÞ CSDL kh¸c cã c¬ së lµ SQL.§©y chÝnh lµ ¸nh x¹ kiÓu tõ CSDL kh¸c sang kiÓu t−¬ng øng bªn MySQL,do ®ã dÔ dµng chuyÓn b¶ng tõ CSDL kh¸c sang b¶ng cã kiÓu trong MySQL .
  • 75. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 75 KiÓu ë c¸c thµnh phÇn kh¸c KiÓu trong mySQL Binary(num) Char(num)binary Char varyfing(num) Varchar(num) Float4 Float Float8 double Int1 Tinyint Int2 Smallint Int3 Mediumint Int4 Int Int8 Bigint Long Varbinaryint mediumBlob Long Varchar mediumText Midleint Mediumint Varbinary Varchar(num)Bynary NÕu b¹n t¹o b¶ng víi kiÓu sö dông lµ cña bé m¸y CSDL kh¸c th× khi ®−a ra lÖnh :DISCRIBE tbl_name,khi ®ã Mysql sÏ ghi l¹i cÊu tróc b¶ng nµy víi kiÓu t−¬ng øng trong Mysql. 5.C¸c kiÓu b¶ng trong MySQL Trong Mysql cã 4 kiÓu b¶ng kh¸c nhau ,cã thÓ t¹o nhiÒu kiÓu b¶ng víi c©u lÖnh CREATE TABLE: KiÓu b¶ng MyISAM(indexsequential acces method):§©y lµ kiÓu b¶ng mÆc ®Þnh ®−îc t¹o ra khi b¹n dïng lÖnh Create,nã lµ c¬ së trong m· lÖnh ISAM vµ cã mét s« sù më réng h÷u dông t¹o ra file víi phÇn më réng .MYI KiÓu b¶ng MyHeap:C¸c b¶ng kiÓu nµy ®−îc l−u tr÷ trong bé nhí ,viÖc chØ sè ho¸ cña chóng ®−îc thùc hiÖn bëi hµm b¨m,v× vËy mµ tèc ®é thùc hiÖn cña b¶ng kiÓu nµy cùc k× nhanh,nh−ng nã ph¶I tr¶ gi¸ rÊt ®¾t ,v× d÷ liÖu cña ta bÞ mÊt .V× vËy b¶ng nµy chØ dïng t¹m thêi ,b¹n cã thÓ chØ ra s« hµng tèi ®a trong c©u lÖnh Create table .KiÓu b¶ng nµy cã thÓ chiÕm gÇn hÕt bé nhí cña b¹n ,v× vËy kh«ng thÓ sö dông c¸c cét kiÓu blob,text hoÆc auto_increment. B¶ng kiÓu BDB:C¸c b¶ng kiªu nµy lµ nh÷ng giao dÞch an toµn ,chóng ®−îc cung cÊp c¸c lÖnh COMMIT,ROOLBACK,c¸c b¶ng kiÓu nµy ho¹t ®éng chËm h¬n c¸c b¶ng cã kiÓu MyISAM
  • 76. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 76 B¶ng kiÓu Merge:§©y lµ kiÓu b¶ng míi ,m· lÖnh cho kiÓu b¶ng nµy míi ®ang ë phiªn b¶n bªta,tuy nhiªn nã sÏ nhanh chãng æn ®Þnh ,®©y chÝnh lµ b¶ng ISAM nh−ng chóng chØ ®−îc chän lùa mét b¶ng ,chØ ®−îc insert,update,delete mét b¶ng mµ b¹n chän ,nÕu b¹n muèn xo¸ b¶ng chØ cÇn chØ ®Þnh xo¸ merge.B¶ng kiÓu nµy gióp xö lý c¸c vÊn ®Ò sau ,dÔ qu¶n lý vµ t¸ch ra thµnh nhiÒu b¶ng kh¸c nhau ,n©ng cao tèc ®é xö lý ,viÖc t×m kiÕm sÏ hiÖu qu¶ h¬n. II. C¸c hµm trong MySQL Hµm dïng trong c©u lÖnh SELECT vµ WHERE 1. Hµm nhãm. Mysql>select 12*3 ->7 Mysql>select (12)*3 ->9 2. C¸c phÐp to¸n xö lý th«ng th−êng Céng : Mysql>select 35 ->8 Trõ : Mysql>select 3-5 ->-2 Nh©n: Mysql>select 3*5 ->15 Chia:Mysql>select 3/5 ->0.6 Mysql>select 3/0 ->NULL 3. PhÐp to¸n thao t¸c víi bit Sè bit tèi ®a lµ 64 bits PhÐp AND Mysql>select 29&15; ->13 PhÐp OR: Mysql>select 2915; ->31 DÞch tr¸I: Mysql>select 1<<2; ->4 DÞch ph¶i:
  • 77. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 77 Mysql>select 4>>2; ->1 4. PhÐp to¸n l«gic C¸c phÐp and(&),or(::),not(!).C¸c gi¸ trÞ tr¶ vÒ lµ 0 hoÆc 1 t−¬ng øng ®óng hoÆc sai VÝ dô: Mysql>select not 1; ->0 5. C¸c phÐp so s¸nh(>=,>,<=,<) MySQL thùc hiÖn phÐp so s¸nh theo quy t¾c sau: -NÕu mét trong hai ®èi sè lµ NULL th× kÕt qu¶ so s¸nh lµ NULL,trõ phÐp t−¬ng ®−¬ng . -NÕu c¶ hai ®èi sè lµ kiÓu x©u th× ®−îc so s¸nh nh− gi÷a c¸c x©u víi nhau . -NÕu c¶ hai ®Òu lµ sè nguyªn th× ®−îc so s¸nh nh− c¸c sè nguyªn. -Gi¸ trÞ hexa ®−îc xem nh− lµ x©u nhÞ ph©n nÕu kh«ng so s¸nh víi sè kh¸c . -NÕu mét trong nh÷ng ®èi sè lµ kiÓu TIMESTAMP hoÆc DATETIME cßn ®èi sè kia lµ mét h»ng sè th× h»ng sè ®ã sÏ ph¶I ®−îc chuyÓn sang kiÓu TIMESTAMP tr−íc khi so s¸nh.§ã chÝnh lµ lµm cho viÖc sö dông ODBC th©n thiÖn h¬n. -Trong tÊt c¶ c¸c tr−êng hîp kh¸c th× ®èi sè ®−îc xem nh− lµ sè thùc. VÝ dô: Mysql>SELECT 1>’6x’; ->0 Mysql>SELECT 7>’6x’; ->1 Mysql>SELECT 1=’x6’; ->1 Mysql>SELECT 1 is NULL,0 IS NULL,NULL IS NULL ->0 0 1 phÐp to¸n BETWEEN: expr BETWEEN min AND max Mysql>select 1BETWEEN 2 AND 3; ->0 Mysql>select ‘b’BETWEEN ‘a’ AND ‘c’; ->1 Mysql>select 2BETWEEN 2 AND ‘x-3’; ->0 PhÐp to¸n in,not in(value1,…)
  • 78. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 78 mysql>select 2 IN (0,4,’dfdg’); ->0 mysql>select ‘dfdg’ IN (0,4,’dfdg’); ->1 PhÐp to¸n ISNULL mysql>select ISNULL(11); ->0 mysql>select ISNULL(1/0); ->1 6. C¸c hµm so s¸nh x©u §èi víi c¸c hµm so s¸nh x©u th× cã ph©n biÖt ch÷ hoa ,ch÷ th−êng expr LIKE pat[ESCAPE ‘escape-char’] gi¸ trÞ tr¶ vÒ cã thÓ lµ sè hoÆc x©u,víi hµm nµy cã thÓ dïng hai kÝ tù ®¹i diÖn lµ %,- %: gi¸ trÞ tr¶ vÒ cã thÓ lµ sè c¸c kÝ tù -: gi¸ trÞ phï hîp chØ lµ mét kÝ tù T−¬ng tù ta sÏ cã hµm NOT LIKE: NOT (expr LIKE pat[ESCAPE ‘escape-char’]) VÝ dô : mysql>select ‘hµ’ LIKE ‘hµ-’; ->1 mysql>select 10 LIKE ‘1%’; ->1 Hµm STRCMP(expr1,expr2):tr¶ vÒ 0 nÕu 2 x©u nh− nhau ,-1 nÕu ®èi sè ®Çu nhá h¬n ®èi sè hai theo thø tù s¾p xÕp ,ngoµI ra th× b»ng 1 mysql>select STRCMP (‘text1’,’text2’); ->-1 mysql>select STRCMP (‘text1’,’text’); ->1 mysql>select STRCMP (‘text1’,’text1’); ->0 PhÐp to¸n cast mysql>select “a”=”A”; ->1 mysql>select BINARY “a”=”A”; ->0 Hµm IF(expr1,expr2,expr3)
  • 79. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 79 T−¬ng ®−¬ng víi hµm if kÐp trong ng«n ng÷ C,nÕu expr1 ®óng th× hµm nhËn gi¸ trÞ expr2,ng−îc l¹i th× nhËn gi¸ trÞ expr3 VÝ dô: Mysql>select IF(1<2,4,5); ->4 Mysql>select IF(1>2,yes,no); ->no gi¸ trÞ tr¶ vÒ cã thÓ lµ kiÓu s« hoÆc x©u tuú theo ng÷ c¶nh phï hîp . 7. C¸c hµm to¸n häc. -ABS(x): gi¸ trÞ tuyÖt ®èi cña x mysql>select ABS(-3); ->3 mysql>select ABS(3); ->3 -SIGN(X): DÊu cña biÓu thøc trong ngoÆc ,tr¶ l¹i 0 nÕu X=0,-1 nÕu X<0;1 nÕu X>0 mysql>select (3-5); ->-1 mysql>select (0); ->0 mysql>select (3); ->1 -MOD(N,M):lÊy ph©n d− cña phÐp chia n cho m mysql>select MOD(30,6); ->0 mysql>select 13%6; ->1 -ROUND(X):LÊy phÇn nguyªn gÇn X nhÊt -exp(x),log(x),log10(x) -POW(x,y):x mò y T−¬ng tù ta cã c¸c hµm to¸n häc kh¸c nh−: sin(x),cos(x),tan(x),asin(x),acos(x),atan(x),rand(); 8. C¸c hµm xö lý x©u: -Char(N,…) hµm tr¶ vÒ d·y c¸c kÝ tù cã m· ACCSI ®−îc liÖt kª trong ngoÆc VD: mysql>select CHAR(77,121,83,81,’76’);
  • 80. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 80 ->’MySQL’ mysql> select CHAR(77,77.3,’77.3’); ->’MMM’ -Hµm ghÐp 2 x©u : CONCAT(str1,str2,…) vd : mysql> select CONCAT(‘MY’,’S’,’QL’); ->’MYSQL’ mysql> select CONCAT(‘MY’,NULL,’QL’); ->NULL mysql> select CONCAT(12.5); ->12.5 -CONCAT_WS(separator,str1,str2..) mysql> select CONCAT_WS(“,”,”first name”,”last name”); ->’first name,last name’ mysql> select CONCAT_WS(“,”,”first name”,NULL,”last name”); ->’first name,last name’ -C¸c hµm vÒ ®é dµI cña x©u : LENGTH(str) 0CTET_LENGTH(str) CHAR_LENGTH(str) CHARACTER_LENGTH(str) Mysql>select LENGTH(‘text’); ->4 mysql>select 0CTET_LENGTH(‘text’) -C¸c hµm ®Þnh vÞ x©u con LOCATE(substr,str) POSITION(substr IN str) Mysql>select LOCATE(‘nam’,’ph−¬ngnam’); ->7 Mysql>select LOCATE(‘nama’,’ph−¬ngnam’); ->0 NgoµI ra trong Mysql cßn rÊt nhiÒu c¸c hµm liªn quan ®Õn viÖc xö lý x©u kh¸c nh−ng kh«ng liÖt kª ë ®©y .Ta sÏ sang ch−¬ng míi
  • 81. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 81 CH¦¥NG III. C¸C LÖNH THAO T¸C VíI CSDL I. C¸c lÖnh thao t¸c víi CSDL 1. LÖnh t¹o CSDL Có ph¸p :CREATE DATABASE[if not exists] db_name; T¹o ra CSDL nh− lµ t¹o mét th− môc mµ trong ®ã cã c¸c file,®©y chØ lµ t¹o th− môc chø ch−a cã file,mµ c¸c file ë ®©y lµ c¸c b¶ng.VËy ta sÏ ph¶i cã c©u lÖnh t¹o b¶ng CREATE DATABASE IF NOT EXISTS NHANSU; C©u lÖnh trªn sÏ t¹o ra mét CSDL tªn NHANSU,nh−ng ch−a cã b¶n nµo ®−îc t¹o ra. Tõ kho¸ if not exists nÕu ®−îc chØ ra sÏ tr¸nh ®−îc mét lçi ph¸t sinh nÕu nh− trªn m¸y ®· cã c¬ së d÷ liÖu nµy råi. 2. LÖnh xo¸ CSDL. Có ph¸p:Drop Database [if esists]db_name. C©u lÖnh nµy sÏ xo¸ tÊt c¶ c¸c b¶ng trong c¬ së d÷ liÖu vµ xo¸ lu«n c¶ c¬ së d÷ liÖu cã tªn lµ DB_NAME. VÝ dô:Drop Database [if eists] NHANSU NÕu b¹n thùc hiÖn xo¸ mét c¬ së d÷ liÖu víi kÕt nèi c¬ së d÷ liÖu ®ã th× c¶ CSDL nguån vµ kÕt nèi sÏ bÞ xo¸.B¹n ph¶I rÊt cÈn thËn ®èi víi lÖnh nµy,nã sÏ xo¸ th− môc víi tªn cña CSDL vµ tÊt c¶ c¸c file víi c¸c phÇn më réng nh− sau: .BAK .DAT .HSH .ISD .ISM .ISM .MRG .MYD .MYI .DR .FRM Trong c¸c phiªn b¶n 3.22 hoÆc cò h¬n ta cã thÓ chØ ®Þnh tõ kho¸ if esists ®Ó ng¨n mét lçi xuÊt hiÖn nÕu nh− CSDL ch−a cã trªn ®Üa. II. C¸c lÖnh thao t¸c trªn b¶ng vµ xö lý ®èi víi b¶ng. 1. LÖnh t¹o b¶ng. Có ph¸p: CREAT{TEMPORARY}TABLE{IF NOT ESISTS} Tbl_name [(creat_definition,…)] [table_options] [select_statement]
  • 82. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 82 LÖnh sÏ t¹o ra mét b¶ng trong c¬ së d÷ liÖu hiÖn t¹i nÕu c¬ së d÷ liÖu ch−a tån t¹i th× sÏ cã lçi ph¸t sinh.Trong phiªn b¶n Mysql3.2.2 hoÆc muén h¬n tªn b¶ng cã thÓ ®−îc chØ ®Þnh râ lµ db_name.table_name trong tr−êng hîp nµy m¸y sÏ thùc hiÖn mµ kh«ng quan t©m tíi viÖc c¬ së d÷ liÖu cã tån t¹i hay kh«ng. Trong ®ã: Tbl_name lµ tªn b¶ng cÇn t¹o table_options :chØ ra kiÓu cña b¶ng cÇn t¹o vµ nh÷ng ®Æc tÝnh cña b¶ng cÇn t¹o table_options ={ISAM | MYISAM | HEAP | MERGE} or AUTO_INCREMENT=#:Gi¸ trÞ tiÕp theo mµ b¹n muèn ®Æt cho b¶ng or AUTO_ROW_LENGTH=#:Gi¸ trÞ trung b×nh ®é dµI cña hµng trong b¶ng or COMMENT=”string”:lêi b×nh luËn tèi ®a 60 kÝ tù or MAX_ROWS=# sè hµng tèi ®a mµ b¹n ®Þnh l−u tr÷ creat_definition:®−îc ®Þnh nghÜa nh− sau: creat_definition: col_name type [NOT NULL | NULL] [DEFAULT default_value] { AUTO_INCREMENT} [PRIMARY KEY}{reference_definition] or PRIMARY KEY (index_col_name,…) or KEY [index_name] (index_col_name,…) or INDEX [index_name] (index_col_name,…) or UNIQUE {INDEX} [index_name] (index_col_name,…) or FULLTEXT {INDEX} [index_name] (index_col_name,…) or {CONSTRANINT symbol] FOREIGN KEY index_name ((index_col_name,…) [reference_defintion] or CHECK (expr) type:KiÓu cña cét ®−îc t¹o trong b¶ng REFERENCES tab_name [(index_col_name,…)] [MATCHFULL | MATCHPARTIAL] [ON DELETE reference_option ] [ON UPDATE reference_option] reference_option: RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT
  • 83. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 83 Trong phiªn b¶n 3.23 b¹n cã thÓ sö dông tõ kho¸ temporary khi t¹o mét b¶ng,b¶ng t¹m nµy sÏ tù ®éng ®−îc xo¸ khi kÕt thóc mét phiªn lµm viÖc . NOT NULL: NÕu cét ®−îc chØ ®Þnh lµ NOT NULL th× khi nhËp liÖu ta b¾t buéc ph¶I nhËp d÷ liÖu cho cét nµy . NULL :§èi víi cét kiÓu timestamp sÏ cã sù kh¸c biÖt vÒ gi¸ trÞ NULL so víi nh÷ng cét cã nh÷ng kiÓu kh¸c,b¹n kh«ng thÓ ®−a ra gi¸ trÞ NULL víi cét cã kiÓu timestamp nÕu ®Æt lµ NULL th× nã sÏ tù ®éng ®Æt ngµy giê hiÖn t¹i,bëi v× cét cã kiÓu stamp sö dông c¸ch thøc nµy nªn thuéc tÝnh NULL hoÆc NOT NULL sÏ kh«ng ®−îc ®Æt nh− nh÷ng cét th«ng th−êng vµ nã sÏ ®−îc lê ®I nÕu b¹n chØ ®Þnh ®IÒu nµy . DEFAULT<gi¸ trÞ ngÇm ®Þnh >:cét nµy sÏ tù ®éng ®−îc ®Æt lµ gi¸ trÞ ngÇm ®Þnh nÕu nh− ta bá qua kh«ng nhËp gi¸v trÞ cho cét nµy .Gi¸ trÞ ngÇm ®Þnh ph¶I lµ h»ng sè theo nghÜa lµ ta kh«ng thÓ ®Æt gi¸ trÞ mÆc ®Þnh cho cét lµ gi¸ trÞ tr¶ vÒ cña mét hµm ,nÕu cét ®−îc khai b¸o lµ NOT NULL th× gi¸ trÞ ngÇm ®Þnh sÏ phô thuéc kiÓu cña cét NÕu kh«ng ®Æt DEFAULT -AUTO_INCREMENT:chØ cã ®èi víi cét sè nguyªn cét nµy sÏ tù ®éng ®−îc t¨ng khi nhËp d÷ liÖu .NÕu b¹n xo¸ mét hµng chøa gi¸ trÞ lín nhÊt cña cét auto_increment th× gi¸ trÞ nµy sÏ dïng l¹i cho lÇn nhËp liÖu sau (®IÒu nµy chØ x¶y ra ®èi víi b¶ng lo¹i ISAM mµ kh«ng x¶y ®èi víi b¶ng MYISAM) chó ý:Mçi hµng chØ cã mét cét ®Æt lµ auto_increment vµ ph¶I ®−îc ®Æt lµ chØ sè -UNIQUE KEY:®©y lµ kho¸ cña b¶ng nã chØ cã thÓ nhËn mét gi¸ trÞ nhÊt ®Þnh,sÏ cã lçi nÕu nh− ta chÌn vµo mét hµng cña b¶ng gi¸ trÞ kho¸ trïng víi kho¸ cña hµng ®· tån t¹i . -PRIMARY KEY:§Þnh nghÜa kho¸ chÝnh cña b¶ng,lµ kho¸ duy nhÊt víi rµng buéc r»ng tÊt c¶ c¸c gi¸ trÞ kho¸ ®Òu ph¶I ®Æt NOT NULL mçi b¶ng chØ cã thÓ cã mét kho¸ chÝnh. -FOREIGN KEY :kho¸ ngo¹i dïng lµm kho¸ chÝnh cña b¶ng kh¸c -MÖnh ®Ò SELECT :NÕu cã thªm mÖnh ®Ò SELECT sau c©u lÖnh CREATE TABLE th× Mysql sÏ t¹o c¸c tr−êng míi cho tÊt c¶ c¸c thµnh phÇn n»m trong c©u lÖnh SELECT VÝ dô ta t¹o b¶ng hosinh CREATE TABLE HOCSINH(, Mahs char(5) NOT NULL,PRIMARY KEY, Hoten varchar(35), Ngaysinh date, Quequan varchar(40));
  • 84. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 84 B©y giê ta t¹o b¶ng SINHVIEN gåm cã mét tr−êng masv vµ c¸c tr−êng hoten,quequan,ngaysinh lÊy tõ b¶ng HOCSINH: CREATE TABLE SINHVIEN(, Masv char(5) NOT NULL PRIMARY KEY, SELECT hoten,ngaysinh,quequan from HOCSINH); Mçi b¶ng tbl_name sÏ ®−îc thay bëi mét sè file trong th− môc c¬ së d÷ liÖu ,nÕu kiÓu b¶ng lµ MYISAM b¹n sÏ thu ®−îc c¸c file sau khi thùc hiÖn lÖnh t¹o b¶ng Tªn file Chøc n¨ng Tbl_name.frm file ®Þnh d¹ng b¶ng Tbl_name.Myd file chøa d÷ liÖu Tbl_name.MyI file chØ sè 2. LÖnh söa cÊu tróc b¶ng Có ph¸p :ALTER[IGNORE] TABLE tbl_name alter_spec[,alter_spec...] alter_specification : ADD[COLUMN] create_definition[FIRST |AFTER colum_name] Or ADD[COLUMN] (create_definition, create_definition,..) Or ADD INDEX[index_name] (index_col_name,..) Or ADD PRIMARY KEY(index_col_name,..) Or ADD UNIQUE[index_name](index_col_name,..) Or ADD FULLTEXT[index_name](index_col_name,..) OR ADD[CONSTRAIN symbol] FOREIGN KEY index_name (index_col_name) [referent_definition] or ALTER[COLUM] col_name{SET DEFAULT literal |DROP DEFAULT} OR CHANGE[COLUM] old_col_name create_definition Or MODIFY[COLUMN] create_definition OR DROP[COLUMN] column_name OR DROP PRIMARY KEY OR DROP INDEX index_name Or RENAME[TO] new_tbl_name Or table_options LÖnh ALTER TABLE cho phÐp b¹n söa cÊu tróc cña mét b¶ng ®· cã,vÝ dô b¹n cã thÓ thªm hoÆc xo¸ cét,t¹o hoÆc huû chØ sè,thay ®æi kiÓu cña cét ®· cã ,hoÆc ®æi tªn cét hoÆc ®æi tªn b¶ng ,b¹n cã thÓ thay ®æi lêi chó thÝch cho b¶ng hoÆc kiÓu cña b¶ng . NÕu sö dông lÖnh ALTER TABLE ®Ó thay ®æi mét cét ®· ®−îc chØ ®Þnh râ nh−ng DESCRIPE tbl_name chØ ra r»ng cét kh«ng thÓ thay ®æi ,cã nghÜa lµ Mysql bá qua sù thay ®æi nµy do mét lý do nµo ®ã .VÝ
  • 85. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 85 dô nÕu b¹n cè thay ®æi mét cét cã kiÓu varchar sang cét kiÓu char th× Mysql sÏ kh«ng thùc hiÖn viÖc thay ®æi nÕu trong b¶ng cã c¸c cét cã ®é dµi thay ®æi . LÖnh ALTER TABLE thùc hiÖn viÖc t¹o mét b¶n sao t¹m thêi cña b¶ng nguån viÖc söa ®æi thùc hiÖn trªn b¶ng sao nµy ,b¶ng nguån sÏ ®−îc xo¸ khi b¶ng míi ®−îc ®æi tªn v× ho¹t ®éng theo c¸ch nµy nªn viÖc cËp nhËt sÏ ®−îc thùc hiÖn mét c¸ch tù ®éng mét lÇn n÷a tíi b¶ng míi §Ó sö dông lÖnh ALTER TABLE b¹n cÇn ph¶i cã quyÒn :select,insert,update,create,drop ®èi víi b¶ng. -Mét sè vÝ dô dïng lÖnh ALTER TABLE : §Ó söa ®æi tªn mét cét : ALTER TABLE hocsinh CHANGE hokhautt,hokhautt varchar (40); NÕu b¹n muèn thay ®æi kiÓu cña cét mµ kh«ng muèn ®æi tªn th× b¹n vÉn ph¶i viÕt tªn cña cét 2 lÇn . ALTER TABLE hocsinh CHANGE hokhautt,hokhautt CHAR (40); Ta còng cã thÓ dïng MODIFY ®Ó thay ®æi kiÓu cña cét ALTER TABLE hocsinh modify ngaysinh char(10); NÕu sö dông lÖnh CHANGE hoÆc modify víi mét cét ®· s¾p xÕp mµ file chØ sè ®· tån t¹i th× b¹n kh«ng thÓ s¾p xÕp nhiÒu h¬n sè kÝ tù ®· ®−îc chØ sè ho¸ . Khi dïng change hoÆc modify Mysql sÏ cè g¾ng chuyÓn d÷ liÖu sang kiÓu míi mét c¸ch tèt nhÊt . -drop index :huû file chØ sè nÕu cét ®−îc s¾p xÕp l«gic (chØ sè ) mµ ta xo¸ nã th× nã còng ®−îc xo¸ ë thµnh phÇn chØ sè nµy còng sÏ ®−îc xo¸ Drop primary key xo¸ kho¸ chÝnh -ORDER BY:cho phÐp t¹o mét b¶ng míi víi hµng ®−îc chØ ra ë mÖnh ®Ò order by ,chó ý r»ng b¶ng sÏ kh«ng cßn nh− cò trong mÖnh ®Ò order sau khi chÌn vµ xo¸ §æi tªn b¶ng : ALTER TABLE old_name rename new_name; ®Ó chuyÓn mét cét tõ kiÓu integer sang tinyint not null(víi cïng tªn ) vµ ®æi cét cã tªn lµ hoten char(10)->char(20) vµ ®æi tõ hoten- >hovaten ALTER TABLE sinhvien modify masv tinyint not null ,change hoten hovaten char(20); Bæ sung thªm tr−êng ngaysinh ALTER TABLE sinhvien add ngaysinh timestamp ; ®Ó chuyÓn cét thµnh kho¸ chÝnh ALTER TABLE sinhvien add primary key(masv);
  • 86. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 86 3. LÖnh ®æi tªn b¶ng Có ph¸p :Rename table tbl_name |to newtbl_name |,tbl_name2 to newtablename,…] ViÖc ®æi tªn thùc hiÖn mét c¸ch tù ®éng cã nghÜa lµ trong khi thùc hiÖn ®æi tªn sÏ kh«ng thÓ truy nhËp vµo b¶ng nµy . ViÖc ®æi tªn thùc hiÖn tõ tr¸i qua ph¶i ,v× vËy nÕu b¹n muèn chuyÓn ®æi gi÷a c¸c b¶ng b¹n sÏ thùc hiÖn nh− sau : RENAME TABLE old_table to backup_table, New_table to old_table, Backup_table to new_table; B¹n cã thÓ ®æi tªn b¶ng gi÷a 2 CSDL kh¸c nhau : RENAME TABLE curent_database.table_name to otherdatabasse.table_name Khi b¹n thùc hiÖn c©u lÖnh rename b¹n kh«ng thÓ thùc hiÖn viÖc kho¸ b¶ng hoÆc thùc hiÖn mét giao dÞch. 4. LÖnh xãa b¶ng: Có ph¸p :Drop table [if esists ] tbl_name1 [,tbl_nme2,...] [restrict/cascade] LÖnh nµy cã thÓ xo¸ mét b¶ng hoÆc nhiÒu b¶ng,tÊt c¶ d÷ liÖu trong b¶ng sÏ bÞ xo¸.LÖnh Drop table kh«ng ph¶ilµ mét giao diÖn an toµn. 5. LÖnh tèi −u b¶ng. Có ph¸p: Optimize table tbl_name [,tbl_name,…] LÖnh nµy nªn dïngkhi b¹n xo¸ phÇn lín d÷ liÖu cña b¶ng hoÆc b¹n thùc hiÖn nhiÒu sù thay ®æi ®Õn b¶ng nh− thay ®æi ®é dµI cña c¸c hµng(§èi víi b¶ng cã kiÒu varchar,bolb),hoÆc xo¸ b¶n ghi ®· ®−îc duy tr× trong mét danh s¸ch liªn kÕt vµ c©u lÖnh insert sau ®ã dïng l¹i vÞ trÝ cña b¶n ghi võa xo¸. LÖnh nµy chØ thùc hiÖn víi b¶ng kiÓu MYISAM vµ BOB. 6. LÖnh Check table (KiÓu tra b¶ng) Có ph¸p: Check table tbl_name [tbl_name,…][option…]; Option=Quick/fast/medium/extend/changed C©u lÖnh trªn chØ thùc hiÖn ®èi víi b¶ng MYISAM nÕu kh«ng chØ ®Þnh option nã sÏ mÆc ®Þnh lµ medium.C©u lÖnh thùc hiÖn viÖc kiÓm tra lçi cña b¶ng.
  • 87. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 87 7. LÖnh t¹o b¶ng sao l−u(dù tr÷) Có ph¸p:Backup table tbl_name [,tbl_name…] to ‘path/to/backup/directory’; Nã sÏ thùc hiÖn viÖc sao chÐp toµn bé c¸c file cña b¶ng tíi th− môc l−u tr÷,kÝch th−íc l−u tr÷ lµ nhá nhÊt. 8. LÖnh phôc håi b¶ng ®· Backup. Có ph¸p:Restore table tbl_name,…] From’/path/to/backup/directory’ Phôc håi mét b¶ng ®· ®−îc sao l−u chØ thùc hiÖn ®èi víi b¶ng ®· ®−îc backup b¶ng ®· tån t¹i sÏ kh«ng bÞ ghi ®Ì, b¹n sÏ gÆp khã lçi nÕu cã phôc håi mét b¶ng ®· tån t¹i. 9. LÖnh ph©n tÝch b¶ng. Có ph¸p:analiyze table tbl_name [,tbl_name …] Ph©n tÝch vµ l−u thuéc tÝnh kho¸ cho b¶ng trong khi ph©n tÝch b¶ng sÏ bÞ khãa víi kho¸ read lÖnh trªn chØ thùc hiÖn ®èi víi b¶ng MYISAM,BOB.MYSQL sö dông viÖc sao l−u c¸c thuéc tÝnh kho¸ ®Ó quyÕt ®Þnh tr×nh tù viÖc kÕt nèi gi÷a c¸c b¶ng khi thùc hiÖn viÖc kÕt nèi víi mét rµng buéc nµo ®ã. 10. LÖnh repair table. Có ph¸p:REPAIR TABLE tbl_name1 [,tbl_name2,…] [Quick] [extended] LÖnh trªn chØ thùc hiÖn ®èi víi b¶ng MYISAM,c©u lÖnh nµy t−¬ng tù ®èi víi viÖc ch¹y myisamchk_ r table_name; LÖnh thùc hiÖn söa ch÷a b¶ng bÞ háng. 11. LÖnh Delete. Delete [low_priority] from tbl_name [where <§IÒu kiÖn>] [limit rows] //giíi h¹n sè hµng cÇn xo¸. Thùc hiÖn viÖc xo¸ c¸c b¶n ghi tõ tbl_name mµ nã tho¶ m·n ®IÒu kiÖn rµng buéc cña mÖnh ®Ò where vµ tr¶ l¹i sè hµng bÞ xo¸. NÕu kh«ng cã mÖnh ®Ò where th× tÊt c¶ c¸c hµng sÏ bÞ xo¸ nÕu muèn biÕt sè b¶n ghi bÞ xo¸ b¹n sÏ thùc hiÖn theo lÖnh sau:DELETE FROM tbl_name WHERE1>0; 12. LÖnh Truncate. Có ph¸p: Truncate table tbl_name ;
  • 88. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 88 C©u lÖnh trªn t−¬ng tù nh− lÖnh delete from tbl_name; Nh−ng nã còng cã mét sè kh¸c biÖt: -Nã sÏ xo¸ b¶ng vµ t¹o l¹i b¶ng míi víi cÊu tróc cña b¶ng bÞ xo¸,v× vËy nã sÏ thùc hiÖn nhanh h¬n lµ xo¸ nhiÒu hµng. -Nã kh«ng ph¶I lµ mét giao dÞch an toµn:nã sÏ tù ®éng kÕt thóc giao dÞch hiÖn thêi nÕu lÖnh commit ®−îc gäi. -Kh«ng tr¶ l¹i sè dßng ®· bÞ xo¸. 13. LÖnh Select. Có ph¸p: SELECT{STRAIGHT_JOIN}{SQL_SMALL_RESULT} {SQL_BIG_RESULT} {SQL_BUFFER_RESULT} {HIGH_PRIORITY} {DISTINCT | DISTINCTROW |ALL} Select_expression,... [INTO {OUTFILE | DUMPFILE}’file_name’export_options] [FROM table_references [WHERE where_definition] [GROUP BY {unsigned_integer |col_name | formula}] [HAVING where_definition ] [ORDER BY {unsigned_integer |col_name | formula}[ASC |DESC],..] [LIMIT{ofset,}rows] [PROCEDURE procedure_name]] §©y lµ lÖnh dïng ®Ó lÊy d÷ liÖu tõ c¸c hµng cña mét hoÆc nhiÒu b¶ng d÷ liÖu.§©y lµ c©u lÖnh thao t¸c chÝnh cña ng«n ng÷ SQL Mét sè vÝ dô vÒ c©u lÖnh MySql CREATE TABLE persons( Id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, Name char(60) NOT NULL, PRIMARY KEY (id)); CREATE TABLE shirts( Id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, Style ENUM(‘t_shirt’,’polo’,’dress’) NOT NULL, Color ENUM (‘red’,’blue’,’orange’,’white’,’black’) NOT NULL, Owner SMALLINT UNSIGNED NOT NULL REFERENCES persons, PRIMARY KEY (id)); INSERT INTO persons VALUES (NULL,’antonio Paz’);
  • 89. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 89 INSERT INTO shirts VALUES (NULL,’polo’,’blue’,LAST_INSERT_ID()), (NULL,’dress’,’white’LAST_INSERT_ID()), (NULL,’t_shirt,’blue’LAST_INSERT_ID()); INSERT INTO persons VALUES(NULL,’Lilliana Angelovska’); INSERT INTO shirts VALUES (NULL,’dress’,’orange’,LAST_INSERT_ID()), (NULL,’polo’,’red’LAST_INSERT_ID()), (NULL,’dress,’blue’LAST_INSERT_ID()); (NULL,’t_shirt,’white’,LAST_INSERT_ID()); SELECT * FROM persons; Id Name 1 2 Antonio Paz Lilliana Angelovska SELECT * FROM shirt; id style color Owner 1 2 3 4 5 6 7 Polo Dress T_shirt Dress Polo Dress T_shirt Blue White Blue Orange Red Blue white 1 1 1 2 2 2 2 SELECT s.* from persons p,shirts s WHERE p.name LIKE ‘LILIANA%’ AND s.owner=p.id AND s.color<>’white’; Id style color Owner 4 5 6 Dress Polo dress Orange Red blue 2 2 2 14. C¸c c©u lÖnh cËp nhËt d÷ liÖu a. ChÌn dßng míi vµo b¶ng C©u lÖnh Insert :
  • 90. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 90 INSERT [LOW_PRIORITY / DELAYED / IGNORE] [INTO] tbl_name [(col_name,.. .)] VALUES (gi¸ trÞ cét,.. .), (... ),.. . ho¹c : INSERT [LOW_PRIORITY / DELAYED / IGNORE] [INTO] tbl_name [(col_name,.. .)] SELECT.. . ho¹c : INSERT [LOW_PRIORITY / DELAYED / IGNORE] [INTO] tbl_name SET col_name_1=gi¸ trÞ cét 1, col_name_2=gi¸ trÞ cét 2,.. . Trong ®ã : +NÕu sö dông thµnh phÇn LOW_PRIORITY c©u lÖnh chØ cã thÓ insert d÷ liÖu khi kh«ng cã ai ®äc d÷ liÖu tõ b¶ng nµy, vµ ng−êi sö dông ph¶i ®îi khi c©u lÖnh kÕt thóc . +NÕu sö dông thµnh phÇn DELAYED ngõi sö dông sÏ kh«ng ph¶i ®îi cho tíi khi c©u lÑnh insert kÕt thóc mµ viÖc thªm dßng míi vÉn ®îi khi kh«ng cã ai ®äc d÷ liÖu tõ b¶ng nµy. Thµnh phÇn nµy cßn cho phÐp thùc hiÖn c©u lÖnh theo tõng khèi (thùc hiÖn nhiÒu c©u lÖnh insert cïng lóc). +Thµnh phÇn IGNORE sÏ bá qua c¸c lçi khi thªm dßng míi vµo b¶ng. Tr−êng hîp lçi th−êng xÈy ra khi trïng d÷ liÖu lµ kho¸, dßng míi sÏ kh«ng ®−îc thªm vµo b¶ng . VÝ dô : INSERT INTO author (id, fullname, email) VALUES (‘j001’,‘John Writer’,‘jw@somewhere.nice.com’); ho¹c : INSERT INTO author SET id=’j001’,fullname=’JohnWriter’,email=’jw@somewhere.nice.com’; ho¹c : INSERT INTO tempauthor (id, fullname, email) SELECT id, fullname, email FROM author WHERE id >= ‘100’ ; b. C©u lÖnh Replace Có ph¸p :
  • 91. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 91 REPLACE [LOW_PRIORITY / DELAYED] [INTO] tbl_name [(col_name,.. .)] VALUES (gi¸_trÞ_cét,.. .) ho¹c : REPLACE [LOW_PRIORITY / DELAYED] [INTO] tbl_name [(col_name,.. .)] SELECT.. . ho¹c : REPLACE [LOW_PRIORITY / DELAYED] [INTO] tbl_name SET col_name1=gi¸_trÞ_cét1, col_name2=gi¸_trÞ_cét2,.. . C©u lÖnh nµy kh«ng gièng víi c©u lÖnh INSERT , nã thùc hiÖn nh− sau: +Mét dßng (b¶ng ghi) míi ®−îc t¹o ra nÕu cét kho¸ kh«ng bÞ trïng ho¹c b¶ng kh«ng cã cét khãa. +NÕu trïng cét kho¸ toµn bé d÷ liÖu kh«ng ph¶i lµ kho¸ cã trong danh s¸ch cét sÏ ®−îc thay b»ng gi¸ trÞ t−¬ng øng. +NÕu toµn bé d÷ liÖu cÇn thay ®æi mµ bÞ trïng mét dßng (b¶ng ghi) th× d÷ liÖu sÏ kh«ng ®−îc thªm vµo. c. C©u lÖnh Update C©u lÖnh thay thÕ mét hoÆc nhiÒu cét cña mét dßng (b¶ng ghi) tho¶ m·n ®iÒu kiÖn nµo ®ã . Có ph¸p : UPDATE [LOW_PRIORITY] tbl_name SET col_name1=gÝa_trÞ1, col_name2,.. . [WHERE biÓu_thøc_®iÒu_kiÖn] [LIMIT #] +C©u lÖnh nµy lµm thay ®æi gi¸ trÞ cét cña mét dßng (b¶ng ghi) nÕu tho¶ m·n ®iÒu kiÖn chØ ra trong mÖnh ®Ò WHERE. +NÕu kh«ng cã mÖnh ®Ò WHERE toµn bé c¸c dßng sÏ bÞ thay ®æi . +Chóng ta cã thÓ giíi h¹n dßng (b¶ng ghi) bÞ thay ®æi b»ng tuú chän LIMIT. VÝ dô : UPDATE document SET title=’Table of contents’,
  • 92. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 92 comment=’Fixed typo in the title’ WHERE id=321; C©u lÖnh trªn cËp nhËt l¹i tr−êng title vµ comment trong b¶ng document víi m· id = 321. III. C¸c Thao t¸c tªn b¶ng 1. Lùa chän c¸c hµng • B¹n cã thÓ chän c¸c hµng riªng biÖt tõ b¶ng cña m×nh.NÕu b¹n muèn kiÓm tra l¹i sù thay ®æi mµ b¹n ®· thùc hiÖn víi ngµy sinh cña browser ,chän b¶n ghi browser nh− sau : Mysql>SELECT*FROM pet WHERE name=”browser” • KÕt qu¶ x¸c nhËn r»ng n¨m ®−îc ghi ®óng b©y giê lµ n¨m 1989 mµ kh«ng ph¶i lµ n¨m 1998 • C¸c x©u sö dông rÊt phong phó .Do ®ã b¹n cã thÓ sö dông tªn lµ “browser” hay “BROWSER” thi kªt qu¶ kh«ng thay ®æi. • B¹n cã thÓ ®Þnh râ giíi h¹n trªn bÊt kú cét nµo (kh¸c cét tªn) .VÝ dô nÕu b¹n muèn biÕt cã nh÷ng loµi ®éng vËt nµo sinh sau n¨m 1998 ta sÏ kiÓm tra cét ngµy sinh: Mysql>SELECT * FROM pet WHERE both>=”1998-1-1”; • B¹n cã thÓ kÕt hîp c¸c ®k ®Ó x¸c ®Þnh nh÷ng con chã c¸i Mysql> SELECT * FROM pet WHERE species=”dog” AND sex=”f”; Ta co thÓ dïng c¸c to¸n tö “AND” hoÆc “OR” ®Ó kÕt hîp c¸c ®k Mysql> SELECT * FROM pet WHERE species=”snake” OR sex=”bird”; • “AND” vµ “OR” cã thÓ ®−îc trén lÉn nhau ,nÕu thùc hiÖn ®iÒu ®ã tèt h¬n hÕt h·y sö dông dÊu ngoÆc ®¬n. Msql> SELECT * FROM pet WHERE (species = "cat" AND sex = “m”> OR (species = "dog" AND sex = "f"); 2. Lùa chän c¸c cét: • NÕu b¹n kh«ng muèn xem toµn bé b¶ng mµ chØ xem nh÷ng cét mµ b¹n ®ang quan t©m .VÝ dô nÕu b¹n muèn biÕt c¸c con vËt cña m×nh ®−îc sinh khi nµo ,h·y chän c¸c c«t tªn vµ ngµy sinh: Msql> SELECT name, birth FROM pet; • §Ó t×m ra ai së h÷u nh÷ng con vÑt ,sö dông c©u lÖnh sau: Mysql> SELECT owner FROM pet;
  • 93. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 93 • Tuy nhiªn ,chó ý r»ng c©u lÖnh ch¼ng qua lµ lÊy l¹i tr−ßng ng−êi së h÷u tõ mçi b¶n ghi,vµ mét vµi trong sè chóng xuÊt hiÖn nhiÒu h¬n mét lÇn.§Ó c¸c gi¸ trÞ kh«ng bÞ l¨p l¹i ta thªm tõ kho¸ DISTINCT: Mysql> SELECT DISTINCT owner FROM pet; • B¹n cã thÓ sö dông diÒu kiÖn WHERE ®Ó lùa cjän c¸c dßng cïng víi c¸c cét.VÝ dô ®Ó xem ngµy sinh cña chã vµ mÌo th«i th× ta lµm nh− sau: Msql> SELECT name, species, birth FROM pet ->WHERE species = "dog" OR species = "cat"; 3. Ph©n lo¹i c¸c hµng • Cã thÓ b¹n ®· chó ý tíi c¸c vÝ dô tr−íc ®©y vµ thÊy c¸c hµng kÕt qu¶ ®−îc hiÓn thÞ kh«ng theo mét thø tù ®Æc biÖt nµo .tuy nhiªn th−êng dÔ dµng h¬n khi kiÓm tra kÕt qu¶ khi hµng ®· ®−îc ph©n lo¹i theo mét c¸ch cã ý nghÜa .§Ó ph©n lo¹i mét kÕt qu¶ ta sö dông mÖnh ®Ò “ ORDER BY “ sau ®©y lµ vÝ dô vÒ ngµy sinh cña c¸c con vËt ®−îc ph©n lo¹i theo ngµy: Mysql> SELECT name, birth FROM pet ORDER BY birth; • §Ó ph©n lo¹i theo thø tù ng−îc l¹i ,ta thªm tõ kho¸ “DESC” Vµo tªn cét mµ b¹n ®ang ph©n lo¹i : Mysql> SELECT name, birth FROM pet ORDER BY birth DESC; • B¹n cã thÓ s¾p xÕp trªn nhiÒu cét kh¸c nhau .VÝ dô ®Ó s¾p xÕp theo kiÓu vËt sau ®ã lµ ngµy sinh mµ kh«ng quan t©m ®Õn kiÓu con vËt ®ång thêi c¸c con vËt trÎ nhÊt xÕp ®Çu tiªn ,ta sö dông c©u lÖnh sau; mysql> SELECT name, species, birth FROM pet ORDER BY species, birth DESC; Chó ý r»ng tõ kho¸ “DESC” chØ ¸p dông víi tªn cét ë ngay tr−íc nã 4. X¸c ®Þnh ngµy th¸ng ,n¨m cho c¸c kÕt qu¶ tÝnh to¸n: • MySQL cung cÊp mét rÊt nhiÒu chøc n¨ng mµ b¹n cã thÓ sö dông ®Ó thùc hiÖn c¸c kÕt qu¶ tÝnh to¸n theo ngµy.Vi dô ®Ó tÝnh to¸n tuæi hoÆc trÝch dÉn mét phÇn cña ngµy. §Ó x¸c ®Þnh mçi con vÑt cña b¹n lµ bao nhiªu tuæi ,tÝnh to¸n tuæi nh− lµ kho¶ng c¸ch gi÷a ngµy sinh vµ ngµy hiÖn t¹i. §iÒu ®ã ®−îc thùc hiÖn nh− sau: mysql> SELECT name, (TO_DAYS(NOW())- TO_DAYS(birth))/365 FROM pet;
  • 94. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 94 • MÆc dï c¸c c©u lÖnh ®ang lµm viÖc nh−ng cã mét vµi ®iÒu vÒ nã vÉn cã thÓ c¶i tiÕn . • §Çu tiªn kÕt qu¶ cã thÓ ®−îc xem dÔ dµng h¬n nÕu c¸c hµng ®−îc tr×nh bµy theo mét thø tù nµo ®ã • Thø hai, tiªu ®Ò cho cét tuæi th× kh«ng cã ý nghÜa l¾m. VÊn ®Ò thø nhÊt cã thÓ ®−îc gi¶i quyÕt b»ng c¸ch thªm vµo tõ kho¸ “ODER BY” ®Ó s¾p xÕp kÕt qu¶ theo tªn .§Ó liªn hÖ víi tiªu ®Ò cña cét, cung cÊp mét tªn cho cét víi mét nh·n xuÊt hiÖn trong kÕt qu¶(®−îc gäi lµ bÝ danh) mysql> SELECT name, (TO_DAYS(NOW())- TO_DAYS(birth))/365 AS age -> FROM pet ORDER BY name; • NÕu muèn s¾p xÕp kÕt qu¶ theo tuæi h¬n lµ theo tªn, ta chi viÖc sö dông mét c©u lÖnh “ODER BY” kh¸c mysql> SELECT name, (TO_DAYS(NOW())- TO_DAYS(birth))/365 AS age ->FROM pet ORDER BY age; • Mét c©u lÖnh cã thÓ ®−îc sö dông ®Ó x¸c ®Þnh tuæi thä cho nh÷ng con vËt ®· chÕt. B¹n x¸c ®Þnh c¸c con vËt nµo ®−îc kiÓm tra cã hay kh«ng gi¸ trÞ chÕt lµ NULL. Sau ®ã ®èi víi c¸c con cã gi¸ trÞ non_NULL, tÝnh to¸n sù kh¸c nhau gi÷a gi¸ trÞ chÕt vµ sinh. mysql> SELECT name, birth, death, (TO_DAYS(death)- TO_DAYS(birth))/365 AS age FROM pet WHERE death IS NOT NULL ORDER BY age; name birth Death age Bowse 1989-08-31 1995-07-29 | 5.91 • C©u lÖnh sö dông “death is NOT NULL” vÉn tèt h¬n lµ “death=!=NULL” bëi v× NULL lµ gi¸ trÞ ®Æc biÖt. §iÒu nµy ®−îc gi¶i thÝch ë phÇn sau , • NÕu b¹n muèn biÕt con vËt nµo cã ngµy sinh vµo th¸ng sau ?víi kiÓu tÝnh to¸n nµy ,n¨m vµ ngµy ®Òu kh«ng cã liªn quan ,b¹n ch¼ng qua chØ muèn trÝch phÇn th¸ng trong cét ngµy sinh.Msql cung cÊp rÊt nhiÒu chøc n¨ng trÝch ®Én phÇn ngµy sinhnh− AR(),MONTH(),DAY OF MONTH() ,MONTH() ®Òu lµ chøc n¨ng phøc hîp .ë ®©y ®Ó xem nã lµm viÖc ra sao ,ch¹y mét c©u lÖnh ®¬n gi¶n ®Ó hiÓn thÞ gi¸ trÞ cña c¶ ngµy sinh vµ th¸ng sinh
  • 95. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 95 mysql> SELECT name, birth, MONTH(birth) FROM pet; • ViÖc t×m c¸c con vËt cã ngµy sinh vµo th¸ng sau hÕt søc dÔ dµng .Gi¶ sö th¸ng hiÖn t¹i cã th¸ng t− .Sau ®ã ,gi¸ trÞ th¸ng lµ 4 vµ b¹n t×m c¸c con vËt ®−îc sinh vµo th¸ng n¨m nh− sau: o mysql> SELECT name, birth FROM pet WHERE MONTH(birth) = 5; • TÊt nhiªn cã mét r¾c rèi nhá nÕu th¸ng hiÖn t¹i lµ th¸ng 12.B¹n kh«ng chØ thªm 1 vµo sè th¸ng (12) vµ t×m xem con vËt nµo sinh vµo th¸ng 13 ,bëi v× kh«ng cã th¸ng nh− vËy .Thay vµo ®ã ,b¹n t×m c¸c con vËt sinh vµo th¸ng 1 • B¹n còng cã thÓ viÕt c©u lÖnh mµ nã lµm viÖc kh«ng quan t©m tíi th¸ng hiÖn t¹i lµ bao nhiªu ,víi c¸ch ®ã b¹n kh«ng ph¶i sö dông 1 sè th¸ng riªng biÖt nµo trong c©u lªnh DATE=A§() cho phÐp b¹n thªm mét kho¶ng thêi gian vµo mét ngµy ®· ®−îc ®−a ra .NÕu b¹n thªm 1 th¸ng vµo gi¸ trÞ cña NULL() ,sau ®o trÝch phÇn th¸ng víi MONTH(),kÕt qu¶ t¹o ra th¸ng mµ chóng ta t×m ngµy sinh trong ®ã mysql> SELECT name, birth FROM pet ->WHERE MONTH(birth) = MONTH(DATE_ADD(NOW(), INTERVAL 1 MONTH)); • Mét c¸ch kh¸c ®Ó hoµn thµnh c«ng viÖc t−¬ng tù lµ ph¶i thªm 1 vµo ®Ó cã th¸ng sau th¸ng hiÖn t¹i (sau khi sö dông chøc n¨ng module MOD) ®Ó “bäc xung quanh ” gi¸ trÞ th¸ng tíi 0 nÕu nã hiÖn t¹i lµ th¸ng 12 mysql> SELECT name, birth FROM pet WHERE MONTH(birth) = MOD(MONTH(NOW()), 12) 1; • Chó ý r»ng MONTH quay vßng lµ mét sè gi÷ th¸ng 1 vµ th¸ng 12 ,vµ MOD quay vßng lµ mét sè gi÷a 0 vµ 11.Do §ã sù thªm ph¶i theo sau MOD() nÕu kh«ng chóng ta sÏ ®i tõ th¸ng 11 ®Õn th¸ng 1 5. Lµm viÖc víi gi¸ trÞ NULL • Gi¸ trÞ NULL cã thÓ g©y ng¹c nhiªn cho ®Õn khi b¹n lµm quen víi nã .Theo kh¸i niÖm NULL cã nghÜa lµ”gi¸ trÞ kh«ng cã”hoÆc “gi¸ trÞ kh«ng ®−îc biÕt ®Õn” vµ nã ®−îc xem xÐt ë Name birth MONTH(birth Fluffy 1993-02-04 2
  • 96. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 96 mét møc ®é kh¸c biÖt h¬n so víi gi¸ trÞ kh¸c .§Ó kiÓm tra NULL b¹n kh«ng thÓ sö dông c¸c to¸n tö so s¸nh sè häc nh−:=,>,<...§Ó tù m×nh gi¶i thÝch ®iÒu nµy b¹n h·y thö c©u lÖnh sau mysql> SELECT 1 = NULL, 1 != NULL, 1 < NULL, 1 > NULL; 1 = NULL 1 != NULL 1 < NULL 1 > NULL NULL NULL NULL NULL • Râ rµng lµ b¹n kh«ng cã c¸c kÕt qu¶ cã nghÜa tõ c¸c sù ®èi chiÕu nµy h·y sö dông IS NULL vµ IS NOT NULL ®Ó thay thÕ. mysql> SELECT 1 IS NULL, 1 IS NOT NULL; 1 IS NULL 1 IS NOT NULL 0 1 • Trong Mysql ,0 cã nghÜa lµ sai vµ 1 cã nghÜa lµ ®óng • C¸ch sö lý ®Æc biÖt nµy cña NULL lµ lý do t¹i sao trong môc tr−íc viÖc x¸c ®Þnh con vËt nµo ®· chÕt b»ng viÖc sö dông death =NOT NULL thay v× death!=NULL ,l¹i cÇn thiÕt nh− vËy 6. Sù phï hîp vÒ kiÓu • Mysql cung c©p c¸c mÉu chuÈn cho phÐp thay thÕ mét kiÓu nµo ®ã:vÝ dô nh− sö dông‘_’®Ó chØ mét ký tù ®¬n lÎ nµo ®ã ‘%’®Ó chØ mét sè ký tù nµo ®ã cã thÓ lµ kh«ng cã ký tù nµo.Chó ý r»ng trong mysql kh«ng sö dông dÊu=hay!= mµ sö dông LIKE hoÆc NOT LIKE. • Vi dô t×m mét tªn b¾t ®Çu b»ng ký tù ‘b’ mysql> SELECT * FROM pet WHERE name LIKE "b%"; Name Owner species sex birth Buffy Bowser Harold Diane dog dog F M 1989-05-13 1989-08-31 • §Ó t×m tªn kÕt thóc b»ng ‘fy’: mysql> SELECT * FROM pet WHERE name LIKE "%fy"; • §Ó t×m tªn cã chøa mét ký tù b»ng ‘w’: mysql> SELECT * FROM pet WHERE name LIKE "%w%"; • Dïng LIKE: mysql> SELECT * FROM pet WHERE name LIKE "_____";
  • 97. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 97 • Mét sè c¸c quy t¾c kh¸c:’ .Mét líp ký tù:®−îc bao bëi ‘[...]’,vÝ dô’ [abc]’’[1-9]’ .Ký hiÖu ‘*’®Ó chØ ký hiÖu trèng .Sö dông ký hiÖu ‘^’’$’®Ó chØ b¾t ®Çu hoÆc kÕt thóc ®Ó sö dông thi ta ph¶I viÕt tõ kho¸ REGEXP phÝa tr−íc • T×m tªn b¾t ®Çu víi ký tù ‘b’ mysql> SELECT * FROM pet WHERE name REGEXP "^[bB]"; • T×m tªn kÕt thóc b»ng “fy”,sö dông ‘$’ : mysql> SELECT * FROM pet WHERE name REGEXP "fy$"; • T×m tªn cã chøa ký tù’w’sö dông ‘[wW]’®Ó t×m c¶ ký tù th−êng vµ ký tù hoa: mysql> SELECT * FROM pet WHERE name REGEXP "[wW]"; • T×m tªn cã chøa ®óng 5 ký tù sö dông’^’vµ ‘$’®Ó t×m kiÕm: mysql> SELECT * FROM pet WHERE name REGEXP "^.....$"; B¹n còng cã thÓ thùc hiÖn nh− sau: mysql> SELECT * FROM pet WHERE name REGEXP "^.{5}$"; 7. §Õm hµng • C¸c c¬ së d÷ liÖu th−êng ®−îc sö dông ®Ó tr¶ lêi c©u hái “møc ®é th−êng xuyªn cña mét sè kiÓu d÷ liÖu xuÊt hiÖn trong b¶ng nh− thÕ nµo”VÝ dô ,b¹n cã thÓ muèn biÕt b¹n cã bao nhiªu con vÑt ,hoÆc mçi ng−êi chñ cã bao nhiªu con vÑt ,hoÆc b¹n cã thÓ thùc hiÖn rÊt nhiÒu kiÓu ®iÒu tra d©n sè c¸c con vËt cña m×nh • §Õm tæng sè con vËt mµ b¹n cã th× t−¬ng tù nh− c©u hái lµ “cã bao nhiªu hµng trong b¶ng vÒ con vÑt” khi ®ã mét b¶n ghi trªn mét con vÑt ,chøc n¨ng COUNT() ®Õm sè kÕt qu¶ non- NULL,do ®ã c©u lÖnh ®Õm con vËt cña b¹n nh− sau: mysql> SELECT COUNT(*) FROM pet; • DÔ dµng h¬n ,b¹n cã thÓ gäi tªn cña nh÷ng ng−êi chñ së h÷u c¸c con vÑt.B¹n cã thÓ sö dông COUNT() nÕu b¹n muèn t×m ra mçi ng−êi chñ cã bao con vÑt mysql> SELECT owner, COUNT(*) FROM pet GROUP BY owner;
  • 98. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 98 • Chó ý r»ng ,sö dông GROUP BY ®Ó tËp hîp l¹i tÊt c¶ c¸c b¶n ghi cña mçi ng−êi chñ.NÕu kh«ng cã nã,tÊt c¶ nh÷ng c¸i mµ thu d−îc chØ lµ 1 bøc ®iÖn b¸o lçi mysql> SELECT owner, COUNT(owner) FROM pet; ERROR 1140 at line 1: Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause • COUNT() vµ GROUP BY rÊt cã Ých cho viÖc m« t¶ d÷ liÖu cña b¹n theo nh÷ng c¸ch kh¸c nhau. • VÝ dô sau ®©y sÏ chØ ra nh÷ng c¸ch kh¸c nhau ®Ó thùc hiÖn c¸c ®iÒu tra d©n sè con vËt Sè con vËt theo loµi: mysql> SELECT species, COUNT(*) FROM pet GROUP BY species; Species COUNT(*) Bird cat dog hamster snake 2 2 3 1 1 Sè con vËt theo giíi tÝnh: mysql> SELECT sex, COUNT(*) FROM pet GROUP BY sex; (trong phÇn nµy ,NULL ¸m chØ kh«ng biÕt giíi tÝnh) Sex COUNT(*) NULL F M 4 1 1 Sè con vËt theo c¶ loµi vµ giíi tÝnh: mysql> SELECT species, sex, COUNT(*) FROM pet GROUP BY species, sex; • B¹n kh«ng cÇn thao t¸c trªn toµn bé mét b¶ng khi sö dông COUNT().VÝ dô c©u lÖnh tr−íc khi ®−îc thùc hiÖn chØ trªn chã vµ mÌo ,nh− sau: mysql> SELECT species, sex, COUNT(*) FROM pet -> WHERE species = "dog" OR species = "cat"
  • 99. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 99 -> GROUP BY species, sex; • HoÆc nÕu b¹n muèn biÕt sè con vËt theo giíi tÝnh vµ chØ víi nh÷ng con ®É biÕt giíi tÝnh: mysql> SELECT species, sex, COUNT(*) FROM pet -> WHERE sex IS NOT NULL -> GROUP BY species, sex; III. Sö dông nhiÒu h¬n mét b¶ng • B¶ng vÒ con vÑt chØ gi÷ thèng kª lµ b¹n cã nh÷ng con vÑt nµo .NÕu b¹n muèn ghi c¸c th«ng tin kh¸c vÒ chóng ,nh− lµ c¸c sù kiÖn trong cuéc sèng cña chóng nh− viÖc ®Õn gÆp b¸c sÜ thó y ,hoÆc c¸c løa ®Î ®−îc sinh khi nµo ,b¹n cÇn mét b¶ng kh¸c ,vËy b¶ng nµy nªn cÇn g× nã cÇn chøa tªn con vÑt ,v× vËy b¹n cã thÓ biÕt mçi sù kiÖn nãi ®Õn con vËt nµo CÇn ngµy sinh ®Ó b¹n biÕt ®−îc sù kiÖn ®½ x¶y ra khi nµo CÇn mét tr−êng ®Ó m« t¶ sù kiÖn NÕu b¹n muèn cã thÓ ph©n lo¹i ®−îc c¸c sù kiÖn th× viÖc cã mét tr−êng kiÓu sù kiÖn rÊt h÷u Ých • Khi nh÷ng yªu cÇu ®ã ®−îc ®−a ra viÖc tr×nh bµy CREATE TABLE cho b¶ng co thÓ nh− sau: mysql> CREATE TABLE event (name VARCHAR(20), date DATE, ->type VARCHAR(15), remark VARCHAR(255)); • Víi b¶ng vÒ con vÑt ,viÖc chÌn c¸c b¶n ghi cÇn tiÕn hµnh b»ng viÖc thiÕt lËp c¸c vïng ®Ó l−u tr÷ th«ng tin. Fluffy 1995-05-15 litter 4 kittens, 3 female, 1 male Buffy 1993-06-23 litter 5 puppies, 2 female, 3 male Buffy 1991-10-12 litter 3 puppies, 3 female Chirpy 1995-05-15 vet needed beak straightened Slim 1998-08-28 vet broken rib Bowser 1998-12-09 kennel Fang 1993-06-23 kennel Fang 1998-12-09 birthday Gave him a new chew toy Claws 1998-08-28 birthday Gave him a new flea collar • ChÌn c¸c b¶n ghi nh− sau: mysql> LOAD DATA LOCAL INFILE "event.txt" INTO TABLE event;
  • 100. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 100 • Dùa trªn nh÷ng g× mµ b¹n häc ®−îc tõ c¸c c©u lÖnh ch¹y b¶ng “pet” b¹n cã thÓ thùc hiÖn viÖc gäi tªn trªn c¸c b¶n ghi trong b¶ng event,nguyªn t¾c vÉn kh«ng thay ®æi .Nh−ng khi b¶n th©n b¶ng event kh«ng ®ñ ®Ó tr¶ lêi c¸c c©u hái mµ b¹n cã thÓ hái ? • Gi¶ sö b¹n muèn t×m tuæi cña mçi con vËt khi nã cã løa ®Î .B¶ng evevt chØ ra ®iÒu ®ã xuÊt hiÖn khi nµo ,nh−ng ®Ó tÝnh to¸n tuæi cña con mÑ b¹n cÇn ngµy sinh cña nã .Nã ®−îc l−a tr÷ trong b¶ng pet,nªn b¹n cÇn c¶ hai b¶ng cho c©u lÖnh nµy: mysql> SELECT pet.name, (TO_DAYS(date) - TO_DAYS(birth))/365 AS age, remark -> FROM pet, event ->WHERE pet.name = event.name AND type = "litter"; • Cã rÊt nhiÒu ®iÒu ®¸ng l−u ý vÒ c©u lÖnh nµy MÖnh ®Ò FROM ghi vµo danh s¸ch c¶ hai b¶ng khi c©u lÖnh cÇn lÊy th«ng tin tõ c¶ hai Khi kÕt hîp th«ng tin tõ c¸c b¶ng kh¸c nhau ,b¹n cÇn ®Þnh râ cã bao nhiªu b¶n ghi vµ mçi b¶n ghi cã thÓ ®−îc nèi víi c¸c b¶n ghi cña b¶n kia.§iÒu ®ã rÊt dÔ khi c¶ hai b¶n ghi ®Òu cã cïng sè cét.C©u lÖnh sö dôngWHERE dïng ®Ó nãi c¸c b¶n ghi ë hai b¶ng dùa trªn gi¸ trÞ tªn Khi tªn cét xuÊt hiÖn c¶ ë hai b¶ng ,b¹n ph¶i x¸c ®Þnh vÒ b¶n nµo b¹n t×m ®Õn kiÓu ¸m chØ cét .§iÒu nµy ®−îc thùc hiÖn b»ng viÖc quy chiÕu tªn cña b¶ng víi tªn cña cét • B¹n kh«ng nhÊt thiÕt ph¶i cã hai b¶ng kh¸c nhau ®Ó tiÕn hµnh liªn kÕt .§«i khi viÖc tù liªn kÕt l¹i rÊ h÷u Ých ,nÕu b¹n muèn IV. KÕt nèi vµ kh«ng kÕt nèi tíi server 1. §Ó kÕt nèi tíi server b¹n th−êng cung cÊp cho My SQL mét username, vµ mét password. NÕu server ch¹y trªn mét m¸y kh¸c h¬n lµ m¸y b¹n ®ang login. B¹n còng cÇn x¸c ®Þnh mét hostname ®Ó liªn l¹c víi ng−êi qu¶n trÞ cña b¹n ®Ó t×m ra nh÷ng kÕt nèi mµ b¹n sÏ sö dông ®Ó kÕt nèi. Khi b¹n biÕt chÝnh x¸c hostname,username,password b¹n cã thÓ kÕt nèi nh− sau : shell> mysql -h host -u user -p Enter password: ********
  • 101. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 101 2. Mét vµi My SQL æn ®Þnh cho phÐp ng−êi sö dông kÕt nèi mµ kh«ng cã tªn tõ user tíi server ®ang ch¹y localhost trong nh÷ng tr−êng hîp nµy b¹n cã thÓ kÕt nèi tíi server ®ã nh− sau: shell> mysql Sau khi b¹n b¹n ®· kÕt nèi thµnh c«ng b¹n cã thÓ kÕt thóc viÖc kÕt nèi nh− sau : mysql> QUIT B¹n còng cã thÓ sö dông Ctr-D. VI. VÝ dô vÒ c¸c lÖnh c¬ b¶n *Sau ®©y lµ nh÷ng vÝ dô vÒ c¸ch gi¶i quyÕt vÊn ®Ò cïng víi mysql * Mét vµi vÝ dô sö dông hµng shop ®Ó l−u tr÷ gi¸ cña mçi ®Ò môc cho mçi th−¬ng nh©n.Gi¶ sö r»ng mçi th−¬ng nh©n cã mé tËp hîp gi¸ cho mçi ®Ò môc .Sau ®ã lµ kho¸ cho mçi b¶n ghi B¹n cã thÓ t¹o ra mét b¶ng nh− sau: CREATE TABLE shop ( article INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL, dealer CHAR(20) DEFAULT '' NOT NULL, price DOUBLE(16,2) DEFAULT '0.00' NOT NULL, PRIMARY KEY(article, dealer)); INSERT INTO shop VALUES (1,'A',3.45),(1,'B',3.99),(2,'A',10.99),(3,'B',1.45),(3,'C',1.69), (3,'D',1.25),(4,'D',19.95); *VÝ dô vÒ d÷ liÖu nh− sau: SELECT * FROM shop article Dealer Price 0001 0001 0001 0002 0003 0004 A B A G D F 3.45 3.99 10.99 1.45 1.69 1.25 19.95 1. Gi¸ trÞ lín nhÊt cho mçi cét Sè môc cao nhÊt lµ bao nhiªu: SELECT MAX(article) AS article FROM shop Article 4
  • 102. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 102 2.Dßng l−u tr÷ gi¸ trÞ lín nhÊt chøa trong cét : T×m sè dealer vµ price cña c¸c article ®¾t nhÊt SELECT article, dealer, price FROM shop WHERE price=(SELECT MAX(price) FROM shop) (trong mysql kh«ng cã thñ tôc lùa chän) nªn ®Ó lµm ®iÒu ®ã ph¶i chia thµnh hai b−íc T×m gi¸ cao nhÊt tõ b¶ng b»ng lÖnh SELECT Sö dông gi¸ trÞ nµy ®Ó hoµn thµnh c¸c c©u lÖnh tiÕp theo SELECT article, dealer, price FROM shop WHERE price=19.95 Mét c¸ch lµm kh¸c lµ s¾p xÕp c¸c hµng gi¶m dÇn theo gi¸ vµ chØ ®−a ra hµng ®Çu tiªn sö dông LIMIT: SELECT article, dealer, price FROM shop ORDER BY price DESC LIMIT 1 3. Gi¸ trÞ m· cña cét:mçi nhãm:chØ mét gi¸ trÞ * víi mçi article ,t×m dealer(s) sao cho gi¸ lµ cao nhÊt * trong ANSI SQL nã sÏ lµm cïng víi thñ tôc nh− sau SELECT article, dealer, price FROM shop s1 WHERE price=(SELECT MAX(s2.price) FROM shop s2 WHERE s1.article = s2.article) *Trong mysql tèt nhÊt lµ lµm tõng b−íc a.§−a ra danh s¸ch gåm 2 cét(article,maxpice) b.Víi mçi article chän nh÷ng dßng mµ cã gi¸ cao nhÊt *VÝ dô nh− sau: CREATE TEMPORARY TABLE tmp ( article INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL, price DOUBLE(16,2) DEFAULT '0.00' NOT NULL); LOCK TABLES article read;
  • 103. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 103 INSERT INTO tmp SELECT article, MAX(price) FROM shop GROUP BY article; SELECT article, dealer, price FROM shop, tmp WHERE shop.article=tmp.article AND shop.price=tmp.price; UNLOCK TABLES; DROP TABLE tmp; *NÕu b¹n kh«ng sö dông mét temporary table b¹n ph¶i dïng kho¸ “tmp” table *Cã thÓ lµm ®iÒu ®ã víi nh÷ng c©u lÖnh ®¬n lÎ *Cã thÓ gäi hµm “MAX-CONCAT” SELECT article, SUBSTRING( MAX( CONCAT(LPAD(price,6,'0'),dealer) ), 7) AS dealer, 0.00LEFT( MAX( CONCAT(LPAD(price,6,'0'),dealer) ), 6) AS price FROM shop GROUP BY article; 4. Sö dông kho¸ ngoµi B¹n kh«ng cÇn kho¸ ngoµi ®Ó nèi hai b¶ng ChØ nh÷ng thø trong mysql kh«ng lµm ®−îc CHECK ®Ó ch¾c ch¾n r»ng nh÷ng kho¸ b¹n sö dông thùc sù tån t¹i trong b¶ng liªn quan vµ nã kh«ng tù ®éng xo¸ c¸c dßng tõ b¶ng cïng víi kho¸ ngoµi ®−îc ®Þnh nghÜa.NÕu b¹n sö dông kho¸ b×nh th−êng nã vÉn lµm viÖc tíi cïng: CREATE TABLE persons ( id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, name CHAR(60) NOT NULL, PRIMARY KEY (id) ); CREATE TABLE shirts ( id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, style ENUM('t-shirt', 'polo', 'dress') NOT NULL, color ENUM('red', 'blue', 'orange', 'white', 'black') NOT NULL, owner SMALLINT UNSIGNED NOT NULL REFERENCES persons, PRIMARY KEY (id) );
  • 104. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 104 INSERT INTO persons VALUES (NULL, 'Antonio Paz'); INSERT INTO shirts VALUES (NULL, 'polo', 'blue', LAST_INSERT_ID()), (NULL, 'dress', 'white', LAST_INSERT_ID()), (NULL, 't-shirt', 'blue', LAST_INSERT_ID()); INSERT INTO persons VALUES (NULL, 'Lilliana Angelovska'); INSERT INTO shirts VALUES (NULL, 'dress', 'orange', LAST_INSERT_ID()), (NULL, 'polo', 'red', LAST_INSERT_ID()), (NULL, 'dress', 'blue', LAST_INSERT_ID()), (NULL, 't-shirt', 'white', LAST_INSERT_ID()); SELECT * FROM persons; Id Name 1 2 Antonio Paz Lilliana Angelovska SELECT * FROM shirts; Id style color owner 1 2 3 4 5 6 7 Polo Dress t-shirt Dress Polo Dress t-shirt blue white blue orange red blue white 1 1 1 2 2 2 2 SELECT s.* FROM persons p, shirts s WHERE p.name LIKE 'Lilliana%' AND s.owner = p.id AND s.color <> 'white'; Id style color owner 4 5 6 Dress Polo Dress orange red blue 2 2 2
  • 105. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 105 Ch−¬ng IV : HÖ thèng quyÒn truy nhËp c¬ Së D÷ LIÖU Trong MYSql I. Giíi thiÖu chung vÒ vÊn ®Ò an toµn vµ b¶o mËt cña hÖ thèng Trong viÖc th¶o luËn vÒ vÊn ®Ò an toµn cña hÖ thèng chóng ta dÆc biÖt nhÊn m¹nhviÖc cÇn thiÕt cña viÖc b¶o vÖ an toµn cho m¸y chñ ( kh«ng ®¬n gi¶n lµ m¸y chñ Mysql ) chèng l¹i sù tÊn c«ng d−ãi mäi h×nh thøc : nghe trém, söa ®æi cÊu tróc …. Mysql sö dông danh s¸ch ®iÒu khiÓn truy nhËp ( ALSC ) (ACCESS CONTROL LIST) ®Ó ®¶m b¶o an toµn b¶o mËt cña viÖc kÕt nèi,c©u truy vÊn vµ c¸c thao t¸c kh¸c mµ ng−êi sö dông cè g¾ng thùc hiÖn cïng tån t¹i mét sè sù hæ trî m· ho¸ kÕt nèi gi÷a m¸y chñ Mysql vµ m¸y kh¸ch . Khi dïng Mysql chóng ta cÇn chó ý c¸c ®iÒu sau ®©y: - kh«ng cho phÐp ng−êi sö dông truy cËp ®Õn b¶ng Mysql (ngo¹i trõ nh÷ng ng−êi dïng root) - häc hÖ thèng c¸c quyÒn truy xuÊt cña Mysql c¸c c©u lÖnh cÊp ph¸t quuyÒn vµ huû quyÒn cña ng−êi sö dôngnh»m môc ®Ých ng¨n chÆn viÖc truy xuÊt tíi Mysql, kh«ng nªn cÊp ph¸t quyÒn h¹n nhiÒu h¬n møc cÇn thiÕt, kh«ng nªn cÊp quyÒn tíi tÊt c¶ c¸c m¸y chñ. B¹n cÇn kiÓm tra nh÷ng ®iÒu sau ®©y: - cè g¾ng thùc hiÖn Mysql-u root ,nÕu b¹n cã thÓ kÕt nèi víi m¸y chñ mµ kh«ng cÇn mËt khÈu, b¹n ®· cã mét sè vÊn ®Ò råi ®ã, bÊt kú mét ng−êi nµo còng cã thÓ kÕt nèi víi m¸y chñ Mysql víi®Çy ®ñ quyÒn truy xuÊt, b¹n cÇn xem l¹i c¸c chØ thÞ khi cµi ®Æt Mysql, chó ý ®Õn viÖc ®Æt mËt khÈu gèc (root). - Sö dông lÖnh show grant vµ kiÓm tra ng−êi dïng truy cËp ®Õn dÏ liÖu g×, thu håi bít quyÒn h¹n kh«ng cÇn thiÕt . - Kh«ng nªn l−u mËt khÈu d−íi d¹ng v¨n b¶n thuÇn tuý trong c¬ së d÷ liÖu, v× khi m¸y cña b¹n bÞ mét kÎ kh¸c truy nhËp th× nh÷ng kÎ truy nhËp cã thÓ cã ®Çy ®ñ mét danh s¸ch c¸c mËt khÈu vµ sö dông chóng. - Kh«ng nªn dïng mËt khÈu ë tõ ®iÓn v× cã nhiÒu ch−¬ng tr×nh ®Æc biÖt ®Ó ph¸ mËt khÈu nµy . - H·y dung filewall nã sÏ b¶o vÖ tèi thiÓu lµ 50% tÊt c¶ c¸c kiÓu khai th¸c kh¸c nhau cña phÇn mÒn v× vËy h·y ®Æt mysql bªn c¹nh firewall - KiÓm tra ng−êi dïng cã nhËp d÷ liÖu ®¸ng tin cËy kh«ng - Kh«ng nªn truyÒn t¶i c¸c d÷ liÖu ch−a ®−îc m· ho¸ trªn m¹ng v× d÷ liÖu ®ã cã thÓ bÞ chÆn l¹i ®Ó sö dông . - Häc c¸ch sö dông c¸c tiÖn Ých tepdump, string ®Ó b¶o vÖ
  • 106. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 106 II. Lµm thÕ nµo ®Ó Mysql trë nªn an toµn chèng l¹i bän téi ph¹m m¸y tÝnh khi kÕt nèi ®Õn c¬ së d÷ liÖu th«ng th−êng b¹n hay dïng mét mËt khÈu, tuy nhiªn viÖc m· ho¸ chóng th× kh«ng htùc sù m¹nh vµ mét sè næ lùc tÊn c«ng cña nh÷ng kÎ ph¸ ho¹i cã thÓ bÎ ®−îc mËt khÈu cña b¹n nÕu nh− nh÷ng kÎ ph¸ ho¹i cã thÓ chÆng ®øng ®−îc viÖc l−u th«ng gi÷a m¸y chñ vµ m¸y kh¸ch, tÊt c¶ c¸c th«ng tin truyÒn trªn m¹ng ®Òu cã thÓ bÞ ng−êi nµo ®ã chÆng ®øng l¹i vµ sö dông chóng, nÕu b¹n lo l¾ng vÒ ®iÒu nµy th× b¹n cã thÓ sö dông viÖc m· ho¸ kÕt nèi d¹ng tep/ip khi kÕt nãi gi÷a m¸y chñ vµ m¸y kh¸ch. §Ó ®¶m b¶o an toµn cho hÖ thèng b¹n cÇn thùc hiÖn nh÷ng viÖc sau : - Sö dông password cho tÊt c¶ ng−êi dïng v× nÕu kh«ng dïng password th× bÊt kú ng−êi dïng nµo còng cã thÓ truy nhËp c¬ së d÷ liÖu - B¹n cã thÓ thay ®æi password cho tÊt c¶ ng−êi dïng b»ng ch¸ch thay ®æi kÞch b¶n Mysql_install_db tr−íc khi thùc hiÖn mysql hoÆc söa password cho ng−êi dïng root - sell>mysql-u root mysql; mysql>update user set password =password (‘ne− password’); where user =’root’; mysql>flóh privileges; - Kh«ng nªn ch¹y mysql nh− ng−êi dïng unix root ®iÒu nµy rÊt nguy hiÓm v× ng−êi cã quyÒn ®ãi víi file cã thÓ t¹o file t−¬ng tù nh− root, ®Ó ng¨n chÆn ®iÒu nµy th× mysql th−êng kh«ng ch¹y mysql nh− d¹ng root trõ khi cã chØ thÞ trùc tiÕp lµ : -user=root; NÕu ®Æt mËt khÈu cho ng−êi dïng unix root trong kÞch b¶n cña mysql server th× b¹n ph¶i ®¶m b¶o r»ng nã chØ cã thÓ ®−îc ®äc bëi ng−êi dïng root. - KiÓm tra ng−êi dïng Unix r»ng mysql chØ ch¹y ®èi víi ng−êi dïng cã quyÒn read/write. - Trong c¸c tr¹m lµm viÖc Unix kh«ng nªn ch¹y Mysql nh− ng−êi dïng root trõ phi ®iÒu ®ã thùc sù cÇn thiÕt . - Kh«ng nªn g¸n quyÒn process cho tÊt c¶ ng−êi dïng . - Kh«ng nªn g¸n quyÒn ®«Ýo víi file cho tÊt c¶ ng−êi dïng . Mét sè sù chän lùa liªn quan ®Õn viÖc an toµn khi khëi ®éng Mysql -- secure : tr¶ l¹i sè ip bëi gethost by name() lêi gäi hÖ thèng sÏ kiÓm tra ®Ó ®¶m b¶o ch¾c ch¾n r»ng chóng sÏ tr¶ l¹i tªn cña m¸y chñ, ®iÒu nµy sÏ g©y khã kh¨n cho nh÷ng ai phÞa ra mét tªn m¸y ®Ó lÊy ®Þa chØ.
  • 107. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 107 -- skip-grant-table : ®iÒu nµy sÏ lµm cho hÖ thèng kh«ng sö dông hÖ thèng quuyÒn vµ tÊt c¶ mäi ng−êi ®Òu cã ®Çy ®ñ quyÒn h¹n ®Ó truy nnhËp vµo c¬ së d÷ liÖu (b¹n cã thÓ sö dông hÖ thèng quyÒn b»ng c¸ch thùc hiÖn mysqladmin flush-privileges). -- skip-name-resolve: sù chän lùa nµy sÏ lµm cho tÊt c¶ c¸c gi¸ trÞ trong cét host cña b¶ng ph©n quyÒn ®Òu lµ ®Þa chØ IP hoÆc lµ localhost. -- skip-networking: kh«ng cho phÐp giao thøc tep/ip ®−îc kÕt nèi . -- skip-show database: khi cã lÖnh SHOW DATABASE sÏ kh«ng tr¶ l¹i mét gi¸ trÞ nµo c¶ . -- safe-show-database: lÖnh SHOW DATABASE sÏ chØ tr¶ l¹i gi¸ trÞ ®èi víi nh÷ng ng−êi cã quyÒn ®èi víi lÖnh nµy . III. Tªn ng−êi dïng vµ mËt khÈu trong mysql Cã rÊt nhiÒu nÐt ph©n biÖt gi÷a c¸c c¸ch thøc kh¸c nhau mµ tªn ng−êi dïng (user name ) vµ mËt khÈu(pasword) ®−îc sö dông trong Mysql vµ c¸ch thøc chóng ®−îc dïng trong Windows vµ Unix. User name®−îc mysql sö dông cho môc ®Ých nhËn d¹ng hÇu hÕt m¸y kh¸ch Myssql mÆc ®Þnh lµ khi ®¨ng nhËp vµo hÖ thèng sö dông tªn ng−êi dïng Unix hiÖn t¹i ®iÒu nµy cã mét ®iÒu kh«ng hay. ch−¬ng tr×nh ë m¸y kh¸ch cho phÐp nhiÒu tªn ng−êi dïng kh¸c nhau ®−îc chØ ra víi lùa chän –u hoÆc – user ®iÒu nµy sÏ lµm cho hÖ thèng trë nªn kh«ng an toµn trong mäi tr−êng hîp trõ khi tÊt c¶ c¸c tªn ng−êi dïng ®Òu co password bæ v× bÊt kú mét ng−êi nµo ®ã còng cã thÓ nèi víi m¸y chñ sö dông mét tªn nµo ®ã vµ hä sÏ thµnh c«ng nÕu nh− tªn ®ã kh«ng cã password . - Tªn cña ng−êi dïng cã thÓ dµi 16 kÝ tù. - Password trong Mysql kh«ng cã liªn hÖ ®èi víi password trong Unix. Kh«ng cã sù liªn hÖ cÇn thiÕt gi÷a mËt khÈu b¹n sö dông ®Ó ®¨nh nhËp vµo m¸y tÝnh unixvowis mËt khÈu b¹n dïng ®Ó ®¨ng nhËo vµo c¬ së d÷ liÖu Gi÷ mËt khÈu mét c¸ch an toµn Mét diÒu kh«ng hay nÕu nh− mËt khÈu cña b¹n bÞ mét ng−êi kh¸c ph¸t hiÖn ra.D−íi ®©y lµ nh÷ng ph−¬ng ph¸p mµ b¹n chØ râ mËt khÈu cña m×nh vµ c¸c ®¸nh gi¸ vÒ c¸c nguy hiÓm cho tõng ph−¬ng ph¸p . Sö dông –pyour_pass hoÆc –password=your_pass trªn dßng lÖnh, ®iÒu nµy th× tiÖn lîi nh−ng kh«ng an toµn v× mËt khÈu c¶u b¹n sÏ râ rµng ®èi víi ch−¬ng tr×nh tr¹ng th¸i lµm viÖc cña hÖ thèng, vµ mét ng−êi dïng kh¸c cã thÓ thùc hiÖn mét lÖnh hiÓn thÞ. Sö dông –p trong tr−êng hîp nµy ch−¬ng tr×nh ë m¸y kh¸ch sÏ yªu cÇu nhËp mËt khÈu tõ dßng lÖnh Sell>mysql-u user_name-p
  • 108. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 108 Enter password :******** ViÖc nhËp mËt khÈu sÏ an toµn h¬n v× nã sÏ kh«ng bÞ nh×n thÊy bëi ng−êi dïng kh¸c. Tuy nhiªn viÖc nhËp mËt khÈu kiÓu nµy chØ thÝch hîp cho nh÷ng ch−¬ng tr×nh mµ b¹n ch¹y theop lèi t−¬ng t¸c .NÕu nh− b¹n gäi mét kÞch b¶n cña m¸y kh¸ch th× sÏ kh«ng cã c¬ héi ®Ó nhËp mËt khÈu tõ thiÕt bÞ ®Çu cuèi . B¹n còng cã thÓ dïng ph−¬ng ph¸p l−u mËt khÈu cña b¹n vµo file cÊu h×nh (vÝ dô b¹n cã thÓ t¹o ra mét danh s¸ch c¸c mËt khÈu trong phÇn [client] cña file ’My.cnf’ trong Home Directory cña m×nh nÕu theo c¸ch nµy file kh«ng nªn ®Ó d¹ng cã thÓ ®äc ghi. B¹n cã thÓ l−u mËt khÈu trong biÕn m«i tr−êng MySQL_pwd nh−ng tr−êng hîp nµy th−êng Ýt dïng v× nã kh«ng an toµn. IV. HÖ thèng quyÒn truy xuÊt ®−îc cung cÊp bëi MySQL Th«ng tin vÒ quyÒn truy xuÊt cña ng−êi sö dông ®−îc l−u tr÷ trong c¸c b¶ng User, D, Host, Table_Priv vµ b¶ng Column_Priv trong c¬ së d÷ liÖu MySQL, MySQL server sÏ ®äc n«it dung cña c¸c b¶ng khi khëi ®éng. B¶ng sau ®©y liÖt kª c¸c quyÒn vµ t−¬ng øng víi c¸c cét liªn quan ®Õn quyÒn vµ ng÷ c¶nh mµ c¸c quyÒn ®ã ¸p dông. C¸c quyÒn Cét Ng÷ c¶nh Select Select_Priv B¶ng Insert Insert_Priv B¶ng Update Update_Priv B¶ng Delete Delete_Priv B¶ng Index Index_Priv B¶ng Alter Alter_Priv B¶ng Creat Creat_Priv CSDL, B¶ng, ChØ sè Drop Drop_Priv CSDL hoÆc B¶ng Grant Grant_Priv CSDL hoÆc B¶ng References References_Priv CSDL hoÆc B¶ng Reload Reload_Priv Qu¶n trÞ m¸y chñ Shutdown Shutdown_Priv Qu¶n trÞ m¸y chñ Process Process_Priv Qu¶n trÞ m¸y chñ file file_Priv Qu¶n trÞ m¸y chñ • QuyÒn Select, Insert, Delete, Update cho phÐp b¹n thùc hiÖn c¸c thao t¸c ®èi víi c¸c h¶ng cña b¶ng trong c¬ së d÷ liÖu. • QuyÒn Alter cho phÐp b¹n sö dông c©u lÖnh Alter Table. • QuyÒn Creat, Drop cho phÐp b¹n t¹o míi mét CSDL, b¶ng hoÆc xo¸ CSDL b¶ng ®· tån t¹i, chó ý r»ng nÕu b¹n cÊp ph¸t quyÒn Creat, Drop cho ng−êi sö dông, th× ng−êi dïng cã thÓ xo¸ CSDL mµ trong ®ã quyÒn truy nhËp ®Õn MySQL ®−îc l−u tr÷.
  • 109. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 109 • QuyÒn Grant cho phÐp b¹n cÊp ph¸t quyÒn cho nh÷ng ng−êi dïng kh¸c nh÷ng quyÒn mµ b¹n cã. • QuyÒn ®èi víi file cho phÐp ®äc víi ghi ®èi víi file trªn server, sö dông c¸c lÖnh LOAD DATA INFILE vµ SELECT.. INTO OUTFILE bÊt k× ng−êi dïng nµo ®−îc g¸n quyÒn nµy ®Òu cã thÓ ®äc hoÆc hoÆc ghi ®èi víi file mµ SQL cã thÓ ®äc hoÆc ghi. • Nh÷ng quyÒn cßn l¹i ®−îc phôc vô cho c«ng viÖc qu¶n trÞ mµ chóng ®−îc thùc hiÖn bëi ch−¬ng tr×nh MySQL Admin. B¶ng d−íi ®©y sÏ chØ cho b¹n nh÷ng lÖnh mµ quyÒn qu¶n trÞ cho phÐp b¹n thùc hiÖn. QuyÒn Nh÷ng lÖnh cã thÓ thùc hiÖn Reload Reload, refresh, flush_privileges, flush-hosts, flush-logs, flush- tables Shutdown Shutdown Process Processlist, kills LÖnh Reload sÏ chØ thÞ cho m¸y chñ thùc hiÖn viÖc ®äc l¹i b¶ng c¸c ph©n quyÒn, lÖnh refresh n¹p l¹i tÊt c¶ c¸c b¶ng, më vµ ®ãng tÊt c¶ c¸c file log. LÖnh flush-privileges t−¬ng tù nh− lÖnh reload, mét sè lÖnh flush-* kh¸c thùc hiÖn chøc n¨ng nh− refresh, nh−ng cã giíi h¹n hÑp h¬n lÖnh refresh, nã sÏ thÝch hîp trong mét sè tr−êng hîp, vÝ dô ban chØ cµn Flush ®èi víi log file th× lÖnh flush-logs thÝch hîp h¬n lÖnh refresh. • LÖnh Shutdown sÏ lµm cho m¸y chñ ngõng ho¹t ®éng. • Processlist sÏ hiÓn thÞ nh÷ng th«ng tin trong suèt qu¸ tr×nh ho¹t ®éng víi m¸y chñ. • LÖnh kills sÏ t¾t mét phiªn lµm viÖc víi m¸y chñ, b¹n cã thÓ thùc hiÖn 2 lÖnh trªn nhiÒu lÇn trong mét dßng lµm viÖc nh−ng b¹n ph¶i cã quyÒn Process. Mét ý kiÕn hay tæng qu¸t trong viÖc g¸n quyÒn cho ng−êi dïng ®ã lµ chØ g¸n nh÷ng quyÒn cÇn thiÕt cho ng−êi dïng mµ hä cÇn ®Ó hä thùc hiÖn nh÷ng c«ng viÖc cña m×nh. Mét sè chó ý ®èi víi ®Æc ®iÓm thùc hiÖn nh÷ng quyÒn sau: • QuyÒn Grant cho phÐp ng−êi dïng cÊp nh÷ng mµ hä cã cho ng−êi dïng kh¸c. Hai ng−êi sö dông cã c¸c quyÒn kh¸c nhau, víi quyÒn Grant hä cã thÓ kÕt hîp nh÷ng quyÒn nµy. • QuyÒn Alter cã thÓ ®−îc sö dông ®Ó ph¸ vì nh÷ng quyÒn b»ng viÖc ®æi tªn b¶ng. • QuyÒn ®èi víi file cã thÓ bÞ l¹m dông ®Ó ®äc mét sè file trªn m¸y chñ vµo b¶ng trong c¬ së d÷ liÖu, néi dung cña b¶ng nµy cã thÓ bÞ truy nhËp b»ng c¸ch sö dông nh÷ng c©u lÖnh Select, ®iÒu nµy còng cã thÓ ®−îc thùc hiÖn ®èi víi mét sè c¬ së d÷ liÖu chÝnh cña m¸y chñ.
  • 110. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 110 • QuyÒn Shutdown cã thÓ l¹m dông ®Ó tõ chèi mét sè dÞch vô ®èi víi ng−êi sö dông kh¸c b»ng c¸ch t¾t m¸y chñ. • QuyÒn process cã thÓ ®−îc sö dông ®Ó xem d¹ng v¨n b¶n thuÇn Text cña nh÷ng c©u truy vÊn hiÖn thêi kÓ c¶ nh÷ng c©u truy vÊn ®Ó ®Æt l¹i mËt khÈu • QuyÒn ®èi víi nh÷ng c¬ së d÷ liÖu mysql cã thÓ bÞ sö dông ®Ó thay ®æi password vµ mét sè quyÒn truy nhËp th«ng tin kh¸c, Mét sè vÊn ®Ò mµ b¹n kh«ng thÓ thùc hiÖn ®èi víi hÖ thèng quuyÒn h¹n trong Mysql B¹n kh«ng thÓ chØ ra mét c¸ch râ rµng r»ng ng−êi sö dông kh«ng thÓ thùc hiÖn ®−îc, nghÜa lµ b¹n kh«ng thÓ x¸c ®Þnh mét ng−êi dïng phï hîp vµ tõ chèi viÖc kÕt nèi . B¹n kh«ng thÓ chØ râ mét ng−êi dïng cã quyÒn t¹o vµ xo¸ c¸c b¶ng trong mét c¬ sá d÷ liÖu, nh−ng kh«ng cã quyÒn t¹o vµ xo¸ chÝnh CSDL ®ã. V. HÖ thèng quyÒn ho¹t ®éng nh− thÕ nµo HÖ thèng quyÒn trong Mysql ®¶m b¶o mét c¸ch ch¾c ch¾n r»ng mäi ng−êi dïng chØ ®−îc thùc hiÖn nh÷ng c«ng viÖc mµ hä ®−îc cho phÐp thùc hiÖn. khi b¹n kÕt nèi víi m¸y chñ Mysql th× nh÷ng ®Æc tÝnh cña b¹n sÏ ®−îc x¸c ®Þnh bëi m¸y chñ tõ chÝnh n¬i mµ b¹n kÕt nèi vµ tªn ng−êi dïng mµ b¹n nhËp. hÖ thèng quyÒn sÏ theo nh÷ng ®Æc tÝnh cña b¹n vµ nh÷ng g× b¹n muèn ®Ó thùc hiÖn Mysql xem xÐt c¶ hostname vµ username ®−îc b¹n chØ ra v× mét sè lÝ do ®¬n gi¶n lµ tªn cÊp cho ng−êi dïng cung cÊp sÏ thuéc vÒ ng−êi ë mäi n¬i trªn m¹ng. vÝ dô ng−êi dïng cã tªn lµ Bill kÕt nèi vµo Whitehouse.gov kh«ng cÇn thiÕt ph¶i gièng ng−oiõ dïng Bill kÕt nèi vµo micrsoft.com. Mysql ®iÒu khiÓn ®iÒu nµy b»ng c¸ch cho phÐp b¹n ph©n biÖt nhiÒu ng−êi dïng trong nh÷ng m¸y chñ kh¸c nhau mµ cã cïng tªn gièng nhau, b¹n cã thÓ g¸n cho ng−êi dïng cã tªn lµ Bill mét tËp hîp c¸c quyÒn ®Ó kÕt nèi vµo Whitehouse.vµ mét tËp hîp c¸c quyÒn kh¸c ®Ó kÕt nèi vµo micrsoft.com Mysql ®iÒu khiÓn truy nhËp bao gåm hai khung c¶nh kh¸c nhau Khung c¶nh 1: m¸y chñ sÏ kiÓm tra b¹n cã quyÒn kÕt nèi hay kh«ng Khung c¶nh 2: khi b¹n kÕt nèi víi m¸y chñ th× Mysql sÏ kiÓm tra nh÷ng yªu cÇu mµ b¹n ®−a ra ®Ó xem b¹n cã ®ñ quyÒn h¹n ®Ó thùc hiÖn nã mét c¸ch thÝch ®¸ng. vÝ dô nÕu b¹n ®· kÕt nèi vµo CSDL vµ cè g¾ng thùc hiÖn mét lÖnh Select hoÆc xo¸ mét b¶ng cña CSDL th× Mysql sÏ kiÓm tra xem b¹n cã quyÒn select hoÆc drop ®Ó thùc hiÖn ®iÒu ®ã hay khång . Mysql dïng c¸c b¶ng USER,DB,HOST trong CSDL mysql ®Ó ®iÒu khiÓn truy nhËp ë c¶ 2 khung c¶nh trªn, c¸c tr−¬ng trong c¸c b¶ng nµy ®−îc cung cÊp d−íi ®©y:
  • 111. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 111 Tªn b¶ng USER DB HOST C¸c tr−êng ph¹m vi Host Host Host User Data DB Password User C¸c tr−êng chØ quyÒn Select_Priv Select_Priv Select_Priv Insert_Priv Insert_Priv Insert_Priv Update_Priv Update_Priv Update_Priv Delete_Priv Delete_Priv Delete_Priv Index_Priv Index_Priv Index_Priv Alter_Priv Alter_Priv Alter_Priv Creat_Priv Creat_Priv Creat_Priv Drop_Priv Drop_Priv Drop_Priv Grant_Priv Grant_Priv Grant_Priv References_Priv Reload_Priv Shutdown_Priv Process_Priv file_Priv Mçi b¶ng ph©n quyÒn bao gåm tr−êng ph¹m vi vµ tr−êng quyÒn, tr−êng ph¹m vi x¸c ®Þnh c¸c ph¹m vi c¸c môc trong b¶ng c¸c khung c¶nh lµ n¬i c¸c mô ®ã khÐp vµo. vÝ dô trong b¶ng ng−êi dung môc HOST ,USER cã gi¸ trÞ Lµ ‘vnuh.vnn.vn’vµ ‘thu’ dïng ®Ó nhËp ra sù kÕt nèi tíi m¸y chñ bëi ‘thu’kÕt nèi tíi m¸y chñ ‘vnuh.vnn.vn’t−¬ng tù trong b¶ng DB môc HOST ,USER, DB cã c¸c gi¸ trÞ lµ ‘vnuh.vnn.vn’vµ ‘thu’, ‘repost ’ dïng ®Ó nhËn ra sù kÕt nèi bëi ‘thu’ kÕt nèi tíi m¸y chñ ‘vnuh.vnn.vn’, truy nhËp ®Õn CSDL ‘repost’ b¶ng table-priv,column-priv chøa tr−êng ph¹m vi ®Ó chØ ra c¸c b¶ng, b¶ng / cét ®−îc kÕt hîp l¹i cho c¸c môc ®−îc yªu cÇu. -§Ó thùc hiÖn chøc n¨ng kiÓm tra truy nhËp viÖc so s¸nh gi¸ trÞ cña Host th× kh«ng ph©n biÖt ch÷ hoa ch÷ th−êng, gi¸ trÞ cña db, password vµ table_name th× cã ph©n biÖt ch÷ hoa ch÷ th−êng, column_name kh«ng ph©n biÖt ch÷ hoa ch÷ th−êng. -Tr−êng trong quyÒn mçi b¶ng chØ ra c¸c quyÒn ®−îc g¸n bëi c¸c thùc thÓ b¶ng ®ã lµ c¸c thao t¸c cã thÓ cho phÐp thùc hiÖn. Tr−êng ph¹m vi cã kiÓu x©u ®−îc khai b¸o nh− tr−íc ®©y, gi¸ trÞ mÆc ®Þnh cho mçi tr−êng lµ rçng.
  • 112. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 112 Tªn tr−êng KiÓu tr−êng Host CHAR(60) User CHAR(16) Password CHAR(16) Db CHAR(64) Table_name CHAR(60) Column_name CHAR(60) Trong tÊt c¶ c¸c b¶ng uer, host, db tÊt c¶ c¸c tr−êng ®Òu khai b¸o lµ Enum(‘N’,’Y’), gi¸ trÞ mÆc ®Þnh cho mçi tr−êng lµ ‘N’ -Trong c¸c b¶ng table_priv, column_priv c¸c tr−êng ®Òu ®−îc g¸n kiÓu tËp hîp. §Æc ®iÓm vÒ quyÒn trong c¸c b¶ng cña CSDL Mysql -B¶ng user: Tr−êng ph¹m vi trong b¶ng user x¸c ®Þnh xem b¹n cã ®−îc phÐp thùc hiÖn hoÆc kh«ng ®−îc phÐp thùc hiÖn kÕt nèi bÊt kú mét quyÒn nµo ®−îc g¸n trong b¶ng user th× tÊt c¶ c¸c quyÒn nµo lµ toµn côc trong mysql, nghÜa lµ c¸c quyÒn nµy sÏ cã hiÖu lùc ®èi víi tÊt c¶ CSDL trªn server -B¶ng db vµ b¶ng host ®−îc sö dông kÕt hîp víi nhau: Tr−êng ph¹m vi trong b¶ng db x¸c ®Þnh nh÷ng ng−êi dïng nµo ®−îc phÐp truy cËp ®Õn CSDL nµo, m¸y chñ nµo, tr−êng quyÒn sÏ chØ ra c¸c thao t¸c nµo sÏ ®−îc cho phÐp thùc hiÖn. B¶ng host ®−îc sö dông nh− mét sù më réng cña b¶ng db khi b¹n muèn trao cho c¸c thùc thÓ trong b¶ng db cã quyÒn ®èi víi nhiÒu host. VÝ dô, b¹n muèn mét ng−êi dïng trong b¶ng db cã thÓ sö dông mét CSDL tõ nhiÒu m¸y chñ kh¸c nhau. B¶ng table_priv, column_priv còng t−¬ng tù nh− b¶ng db nh−ng nã cã qu¶n lý mét c¸ch chi tiÕt h¬n, c¸c quyÒn sÏ ®ùoc g¸n t¹i nhiÒu møc kh¸c nhau cho c¸c b¶ng, cét trong CSDL. Chó ý: C¸c quyÒn phôc vô cho c«ng t¸c qu¶n trÞ chØ ®−îc chØ ra trong b¶ng user bëi v× mét lý do ®¬n gi¶n lµ c¸c quyÒn nµy chØ thao t¸c víi m¸y chñ nªn kh«ng cã lý do g× ®−a nã vµo trong b¶ng ph©n quyÒn kh¸c. VI. §iÒu khiÓn truy nhËp 1. §iÒu khiÓn truy nhËp Khung c¶nh mét (Stage 1) thÈm tra kÕt nèi thuËn hoÆc tõ chèi viÖc kÕt nèi cña b¹n dùa trªn c¸c ®Æc tÝnh cña b¹n vµ thÈm tra l¹i ®iÒu nµy b»ng c¸ch b¹n ph¶i cung cÊp mét mËt khÈu dóng. NÕu kh«ng nã sÏ tõ chèi viÖc kÕt nèi cña b¹n, nÕu thµnh c«ng nã sÏ chuyÓn sang khung c¶nh thø hai (Stage 2). ViÖc x¸c ®Þnh nh÷ng ®Æc tÝnh cña b¹n dùa trªn hai th«ng tin c¬ b¶n:
  • 113. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 113 - Tªn m¸y chñ mµ b¹n muèn kÕt nèi - Tªn ng−êi dïng ViÖc kiÓm tra sÏ thùc hiÖn trªn ba tr−êng ph¹m vi trong b¶ng user ®ã lµ host, user vµ password m¸y chñ chi chÊp nhËn viÖc kÕt nèi cña b¹n khi mµ c¸c thùc thÓ trong b¶ng user phï hîp víi host, user vµ b¹n ph¶i cung cÊp password ®óng. 2. §iÒu khiÓn truy nhËp Khung c¶nh 2(Stage 2) x¸c minh yªu cÇu khi viÖc kÕt nèi cña b¹n ®· thµnh c«ng mysql server sÏ chuyÓn sang khung c¶nh 2, ®èi víi mçi yªu cÇu cña mçi kÕt nèi mysql server sÏ thÈm tra xem b¹n cã ®ñ quyÒn h¹n ®Ó thùc hiÖn c¸c quyÒn h¹n ®ã hay kh«ng dùa trªn c¸c lo¹i thao t¸c mµ b¹n muèn thùc hiÖn viÖc thÈm tra sÏ ®ùoc thùc hiÖn ®èi víi c¸c tr−êng quyÒn trong c¸c b¶ng ph©n quyÒn, user, host, db. TÊt c¶ c¸c quyÒn ®ùoc cÊp trong b¶ng user sÏ ®ùoc Ên ®Þnh lµ toµn côc cho tÊt c¶ c¸c CSDL nãi c¸ch kh¸c tÊt c¶ c¸c quyÒn ®−íc cÊp trong b¶ng user lµ superuser. V× vËy mµ b¹n chØ nªn cÊp quyÒn trong b¶ng user cho nh÷ng ng−êi dïng nh− ng−êi qu¶n trÞ m¸y chñ hoÆc ng−êi qu¶n trÞ CSDL. VII. Khi nµo viÖc thay ®æi quyÒn h¹n cã hiÖu lùc Khi mysql khëi ®éng th× néi dung cña tÊt c¶ c¸c b¶ng ph©n quyÒn ®ùoc ®Æt vµo bé nhí vµ khi ®ã nã sÏ cã hiÖu lùc. ViÖc b¹n thay ®æi tÊt c¶ c¸c b¶ng ph©n quyÒn sö dông lÖnh GRANT (Revoke) hoÆc ®Æt l¹i mËt khÈu sÏ ®ùoc m¸y chñ chó ý ngay lËp tøc. NÕu b¹n thùc hiÖn viÖc thay ®æi c¸c b¶ng ph©n quyÒn mét c¸ch thñ c«ng nh− lµ sö dông lÖnh INSERT, UPDATE,… th× b¹n nªn dïng lÖnh flush priviliges hoÆc ch¹y mysqladmin flush priviliges hoÆc mysqladmin reload ®Ó th«ng b¸o cho server biÕt ®Ó reload c¸c b¶ng ph©n quyÒn. Khi server th«ng b¸o mét chó ý r»ng c¸c b¶ng ph©n quyÒn ®· bÞ thay ®æi th× c¸c kÕt nèi ®ang tån t¹i ë phÝa client sÏ bÞ thay ®æi nh− sau: -C¸c thay ®æi ®èi víi c¸c b¶ng, cét sÏ cã hiÖu lùc ®èi víi c¸c yªu cÇu tiÕp theo ë phÝa client. -C¸c thay ®æi vÒ quyÒn ®èi víi CSDL sÏ cã hiÖu lùc ®èi víi c©u lÖnh userdb_name tiÕp theo. ®èi víi c¸c quyÒn toµn côc viÖc thay ®æi password sÏ cã hiÖu lùc ë lÇn kÕt nèi tiÕp theo.
  • 114. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 114 VIII. Cµi ®Æt viÖc khëi t¹o hÖ thèng quyÒn trong mysql -Sau khi cµi ®Æt mysql b¹n cã thÓ ®Æt viÖc khëi t¹o c¸c quyÒn cho mysql b»ng viÖc ch¹y scripts/mysql_install_db. KÞch b¶n nµy sÏ ch¹y mysqlserver ®Ó khëi c¸c quyÒn bao gåm mét tËp hîp c¸c quyÒn sau: §èi víi ng−êi dïng root sÏ ®ùoc t¹o nh− mét superuser nªn nã cã thÓ lµm mäi thø, viÖc kÕt nèi ph¶i ®ùoc thùc hiÖn ë localhost. Chó ý: Ban ®Çu viÖc khëi t¹o sÏ kh«ng yªu cÇu mËt khÈu ®èi víi ng−êi dïng root v× vËy bÊt cø ng−êi nµo còng cã thÓ kÕt nèi nh− mét ng−êi dïng root mµ kh«ng bÞ ®ßi hái password do ®ã viÖc ®Çu tiªm mµ b¹n nªn lµm lµ thay ®æi password cho ng−êi dïng root. - BÊt cø mét ng−êi dïng nµo ®−îc t¹o còng cã thÓ lµm mäi thøc ®èi víi CSDL test nh−ng viÖc kÕt nèi ph¶i ®ùoc thùc hiÖn ë localhost. IX. G¸n thªm quyÒn ng−êi dïng ®èi víi mysql B¹n cã thÓ t¹o mét ng−êi dïng míi b»ng hai c¸ch: Dïng lÖnh Grant hoÆc thao t¸c trùc tiÕp trªn CSDL mysql. C¸ch thøc th−êng ®ùoc dïng h¬n c¶ lµ dïng lÖnh grant bëi v× nã ng¾n gän vµ Ýt lçi h¬n. C¸c vÝ dô sau sÏ thùc hiÖn viÖc t¹o mét ng−êi dïng míi. §Ó thùc hiÖn ®iÒu nµy th× b¹n ph¶i kÕt nèi víi mysql nh− mét ng−êi dïng root vµ ng−êi dïng root nµy ph¶i ®−îc g¸n quyÒn insert ®èi víi CSDL mysql vµ ph¶i cã quyÒn qu¶n trÞ reload Mysql> GRANT ALL PRIVILEGES ON *.* TO monty@localhost IDENTIFIED BY ‘some_pass’ WITH GRANT OPTION; Mysql> GRANT ALL PRIVILEGES ON *.* TO monty@”%” IDENTIFIED BY ‘some_pass’ WITH GRANT OPTION; Mysql> GRANT RELOAD, PROCESS ON *.* TO admin@localhost; Mysql> GRANT USAGE ON *.* TO dummy@localhost; C¸c c©u lÖnh trªn g¸n quyÒn cho ban ng−êi dïng monty, admin vµ dummy. - ng−êi dïng monty: §©y lµ ng−êi dïng superuser víi ®Çy ®ñ c¸c quyÒn cã thÓ kÕt nèi bÊt cø n¬i ®©u nh−ng ph¶i cã password lµ “some_pass”. - Ng−êi dïng admin: ng−êi dïng nµy ®−îc quyÒn reload, process nh−ng ph¶i ®¨ng nhËp tõ localhost vµ kh«ng yªu cÇu password - Ng−êi dïng dummy cã thÓ kÕt nèi mµ kh«ng cÇn password nh−ng kh«ng ®ùoc g¸n quyÒn g× c¶. - Còng thùc hiÖn viÖc g¸n quyÒn nh− trªn theo c¸ch kh¸c ta cã thÓ lµm nh− sau: Mysql> INSERT INTO user VALUES(‘localhost’,’monty’,PASSWORD(‘some_pass’), ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’)
  • 115. Ban chØ ®¹o cntt cña c¬ quan ®¶ng PHP & MySQL 115 Mysql> INSERT INTO user VALUES(‘%’,’monty’,PASSWORD(‘some_pass’), ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’) Mysql> INSERT INTO user SET Host=’localhost’, User=’admin’, Reload_priv=’Y’, Process_priv=’Y’; Mysql> INSERT INTO user (Host, User, Password) VALUES(‘localhost’,’dummy’,’’); Mysql> FLUSH PRIVILEGES;