Những vấn đề chính sẽ được đề cập trong bài học:
Giới thiệu PHP
Cấu hình IIS, Apache Web Server
Cài đặt PHP.
o Cài đặt PHP.
o Cấu hình ứng dụng PHP
Giới thiệu PHP.
o PHP Script.
o Ghi chú trong PHP
o In nội dung bằng PHP
1. GIỚI THIỆU PHP
PHP viết tắt của chữ Personal Home Page ra đời năm 1994 do phát minh của
Rasmus Lerdorf, và nó tiếp tục được phát triển bởi nhiều cá nhân và tập thể khác, do đó
PHP được xem như một sản phẩm của mã nguồn mở.
PHP là kịch bản trình chủ (server script) chạy trên phía server (server side) như
cách server script khác (asp, jsp, cold fusion).
PHP là kịch bản cho phép chúng ta xây dựng ứng dụng web trên mạng internet hay
intranet tương tác với mọi cơ sở dữ liệu như mySQL, PostgreSQL, Oracle, SQL Server và
Access.
Lưu ý rằng, từ phiên bản 4.0 trở về sau mới hỗ trợ session, ngoài ra PHP cũng như
Perl là kịch bảng xử lý chuỗi rất mạnh chính vì vậy bạn có thể sử dụng PHP trong những
có yêu cầu về xử lý chuỗi.
2. CÀI ĐẶT PHP
Cài đặt PHP trên nền Windows thì sử dụng php-4.0.6-Win32.zip, sau khi cài đặt
ứng dụng này trên đĩa cứng sẽ xuất hiện thư mục PHP, trong thự mục này sẽ có tập tin
php4ts.dll và php.exe cùng với thư mục sessiondata.
Ngoài ra, trong thư mục WINDOW hoặc WINNT sẽ xuất hiện tập tin php.ini, tập
tin này cho phép bạn cấu hình cho ứng dụng PHP. Chẳng hạn, khi sử dụng session, PHP
cần một nơi để lưu trữ chúng, trong tập tin này mặc định là session.save_path =
C:\PHP\sessiondata, nếu bạn cài đặt PHP với thư mục PHP trên đĩa D thì bạn cần thay
đổi đường dẫn trong khai báo này.
Tương tự như vậy, khi có lỗi trong trangPHP thì lỗi thường xuất hiện khi triệu gọi
chúng, để che dấu các lỗi này thì bạn cần khai báo display_errors = Off thay vì chúng ở
trạng thái display_errors = On.
Ngoài ra, trang PHP cũng có thể trình bày một số warning khi chúng phát hiện cú
pháp không hợp lý, chính vì vậy để che dấu các warning này thì bạn cũng cần khai báo
trạng thái Off thay vì On như assert.warning = Off.
3. CẤU HÌNH ỨNG DỤNG PHP
3.1. Cấu hình IIS
Sau khi cài đặt hệ điều hành Windows NT hay 2000 trở về sau, bằng cách khai báo
mới một web site hay virtual site trong một site đang có theo các bước như sau:
1. Tạo một thư mục có tên myPHP đề lưu trữ các tập tin PHP
2. Khởi động IIS (tự động khởi động nếu Windows NT/2000)
142 trang |
Chia sẻ: banmai | Lượt xem: 1932 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Computer learning center, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
e 'IT%')
6. PHAÙT BIEÅU SQL DAÏNG JOIN
Ngoaøi caùc phaùt bieåu SQL vôùi 4 daïng treân, trong phaàn keá tieáp, chuùng toâi trình baøy moät soá phaùt
bieåu SQL daïng Select ñeåâ keát noái döõ lieäu giöõa caùc baûng coù quan heä vôùi nhau, nhöõng phaùt bieåu seõ trình
baøy trong chöông 5 nhö:
¾ Khaùi nieäm JOIN
¾ Phaùt bieåu INNER JOIN
¾ Phaùt bieåu LEFTJOIN
¾ Phaùt bieåu RIGHT JOIN
6.1. Khaùi nieäm veà quan heä
Ñeå phaùt trieån öùng duïng Web baèng baát kyø loaïi cô sôû döõ lieäu naøo, giai ñoaïn phaân tích thieát keá heä
thoáng cöïc kyø quan troïng. Neáu keát quaû phaân tích khoâng toái öu thì öùng duïng ñoù khoâng theå ñaït ñöôïc giaù
trò kyõ thuaät cuõng nhö giaù trò thöông maïi. Thieát keá cô sôû döõ lieäu khoâng toái öu, chuùng coù theå daãn ñeán
vieäc chöông trình chaïy chaäm vaø khoâng beàn vöõng.
Moät khi öùng duïng chaïy chaäm ñi do cô sôû döõ lieäu khoâng toái öu thì raát coù theå baïn phaûi thieát keá
vaø xaây döïng laïi töø ñaàu toaøn boä caáu truùc cuûa chöông trình vaø cô sôû döõ lieäu.
Xuaát phaùt töø lyù do naøy, khi xaây döïng moät öùng duïng thoâng tin quaûn lyù, chuùng ta caàn phaûi qua
nhöõng böôùc phaân tích thieát keá heä thoáng kyõ löôõng ñeå coù ñöôïc moâ hình quan heä vaø ERD tröôùc khi ñeán
caùc moâ hình chöùc naêng chi tieát.
Tuy nhieân, trong lyù thuyeát moät soá kieán thöùc cô baûn baét buoäc baïn phaûi thöïc hieän theo moâ hình
heä thoáng öùng vôùi nhöõng quan heä toaøn veïn, nhöng trong thöïc teá, do tính ñaëc thuø cuûa öùng duïng, thöôøng
baïn phaûi thieát keá laïi moâ hình theo nhu caàu caân ñoái giöõa ñoä phöùc taïp vaø tính toái öu.
Trong öùng duïng baùn haøng qua maïng Test ñaõ trình baøy trong chöông 3, khi quan taâm ñeán moät
hôïp ñoàng treân maïng, ngoaøi nhöõng thoâng tin lieân laïc veà khaùch haøng, baïn caàn phaûi löu tröõ döõ lieäu
khaùc nhö chieát haøng mua, phöông thöùc traû tieàn, phöông thöùc giao haøng,... Vaán ñeà ñöôïc thaûo luaän ôû
ñaây, moãi hôïp ñoàng coù nhì6u maët haøng chi tieát.
Trong tröôøng hôïp naøy, chuùng ta coù 6 thöïc theå lieân quan nhö sau, thöïc theå danh muïc Customers
(thoâng tin lieân laïc cuûa khaùch haøng), Orders (hôïp ñoàng mua haøng), OrderDetails (chi tieát haøng mua),
Items (danh muïc saûn phaåm).
Giaùo vieân: Phaïm Höõu Khang
COMPUTER LEARNING CENTER WWW.HUUKHANG.COM
Sô ñoà 8-1: Moâ hình quan heä
Giaû söû raèng khi nhaäp soá lieäu vaøo cô sôû döõ lieäu, öùng vôùi hôïp ñoàng coù maõ 101, cuûa khaùch haøng coù
teân Nguyeãn Vaên A, ... coù hai saûn phaåm chi tieát: 11 (Nöôùc ngoït) vaø 32 (xaø phoøng Lux).
Trong tröôøng hôïp naøy baïn ñang coù moät maåu tin hôïp ñoàng trong baûng tblCustomers, moät maåu
tin hôïp ñoàng trong baûng tblOrders vaø hai maåu tin trong baûng tblOrderDetails.
Neáu muoán bieát thoâng tin hôïp ñoàng cuûa khaùch haøng A, roõ raøng baïn caàn duøng phaùt bieåu SELECT
vôùi meänh ñeà keát hôïp töø 3 baûng treân. Keát quaû traû veà 2 maåu tin laø söï keát hôïp thoâng tin töø hai baûng
tblCustomers, tblOrders vaø tblOrderDetails.
Khi thöïc thi phaùt bieåu SQL daïng SELECT öùng vôùi cô sôû döõ lieäu nhö treân baïn phaûi duyeät qua
hai maåu tin.
Taát nhieân, khi vieát öùng duïng thì ñieàu naøy chaáp nhaän ñöôïc, vaø coù theå coi laø toái öu. Giaû söû raèng,
öùng duïng naøy ñöôïc phaùt trieån treân WEB caàn löu taâm ñeán vaán ñeà toái öu toác ñoä truy vaán thì sao?
Ngöôøi thieát keá cô sôû döõ lieäu trong tröôøng hôïp naøy phaûi thay ñoåi laïi caáu truùc ñeå taêng toác ñoä truy
caäp qua maïng khi xöû lyù treân cô sôû döõ lieäu cuûa ngöôøi duøng.
1 - n
1 - n
1 - n
Items
Order
Details
Orders
Customers
6.2. Khaùi nieäm veà meänh ñeà JOIN
Trong haàu heát phaùt bieåu SELECT, phaàn lôùn keát quaû maø baïn mong muoán laáy veà ñeàu coù lieân
quan ñeán moät hoaëc nhieàu baûng khaùc nhau. Trong tröôøng hôïp nhö vaäy, khi truy vaán döõ lieäu baïn caàn söû
duïng meänh ñeà JOIN ñeå keát hôïp döõ lieäu treân hai hay nhieàu baûng laïi vôùi nhau.
Khi söû duïng JOIN, baïn caàn quan taâm ñeán tröôøng (coät) naøo trong baûng thöù nhaát coù quan heä vôùi
tröôøng (coät) naøo trong baûng thöù hai. Neáu moâ hình quan heä cuûa baïn khoâng toái öu hay khoâng ñuùng,
quaûn trình söû duïng JOIN seõ cho keát quaû traû veà khoâng nhö yù muoán.
Trôû laïi öùng duïng baùn haøng qua maïng trong giaùo trình naøy, khi xuaát moät hôïp ñoàng baùn haøng
cho khaùch haøng, theo thieát keá trong cô sôû döõ lieäu chuùng ta coù raát nhieàu baûng lieân quan ñeán nhau.
Chaúng haïn, neáu quan taâm baùn haøng thì baùn cho ai. Suy ra, lieân quan ñeán thoâng tin khaùch
haøng, baùn saûn phaåm gì cho hoï thì lieân quan ñeán maõ saûn phaåm, neáu khaùch haøng traû tieàn thì lieân quan
ñeán phieáu thu, neáu khaùch haøng coù coâng nôï thì lieân quan ñeán nôï kyø tröôùc...
Trong phaân naøy, chuùng toâi tieáp tuïc thieát keá moät soá baûng döõ lieäu cuøng vôùi kieåu döõ lieäu töông öùng
vaø quan heä giöõa caùc baûng ñöôïc moâ taû nhö sau:
Giaùo vieân: Phaïm Höõu Khang
COMPUTER LEARNING CENTER WWW.HUUKHANG.COM
tblCustomers (danh saùch khaùch haøng)
[CustID] int auto_increment Primary key,
[CustName] [varchar] (50) NULL ,
[Address] [varchar] (100) NULL,
[Tel] [varchar] (20) NULL,
[FaxNo] [varchar] (20) NULL,
[Email] [varchar] (50) NULL,
[Contact] [varchar] (50) NULL
[Country] [varchar] (3) NULL,
[Province] [varchar] (3) NULL
tblOrders (Hôïp ñoàng baùn haøng)
[OrderID] [int] Not null
auto_increment Primary Key,
[OrderDate] [date] NULL ,
[CustID] int ,
[Description] [varchar] (200) NULL ,
[ShipCost] [float] NULL ,
[TranID] [tinyint] NULL ,
[PaymentID] [tinyint] NULL ,
[Amount] [float] NULL ,
[TotalAmount] [float] NULL ,
tblOrderDetails (Hôïp ñoàng baùn haøng chi tieát)
[SubID] [int] auto_increment NOT NULL ,
[OrderID] int ,
[ItemID] int,
[No] int,
[Qtty] [int] NULL ,
[Price] int NULL ,
[Discount] [Float] NULL ,
[Amount] [Float] NULL
tblItems (Danh saùch saûn phaåm)
[ItemID] int auto_increment Primary key,
[ItemName] [varchar] (200) NULL ,
[Unit] [nvarchar] (20) NULL ,
[Cost] [Float] NULL ,
[Active] [tinyint] NOT NULL ,
[Category] int
Baïn coù theå tìm thaáy caùc baûng döõ lieäu coøn laïi trong döõ lieäu Test trong ñóa ñính keøm theo saùch.
6.3. Meänh ñeà INNER JOIN
Phaùt bieåu SQL daïng SELECT coù söû duïng meänh ñeà INNER JOIN thöôøng duøng ñeå keát hôïp hai
hay nhieàu baûng döõ lieäu laïi vôùi nhau, cuù phaùp cuûa SELECT coù söû duïng meänh ñeà INNER JOIN:
SELECT [SELECT LIST]
FROM
INNER JOIN
ON
WHERE
ORDER BY
[ASC / DESC]
Neáu baïn caàn laáy ra moät soá coät trong caùc baûng coù keát noái laïi vôùi nhau baèng meänh ñeà INNER
JOIN thì cuù phaùp naøy vieát laïi nhö sau:
SELECT [FIELD1,FIELD2, ...]
FROM
INNER JOIN
Giaùo vieân: Phaïm Höõu Khang
COMPUTER LEARNING CENTER WWW.HUUKHANG.COM
ON
WHERE
ORDER BY
[ASC / DESC]
Ví duï 8-23: INNER JOIN vôùi moät soá coät chæ ñònh
/* in ra danh saùch khaùch haøng mua haøng trong thaùng 10 */
Select CustName,OrderID,
OrderDate,Amount,
TotalAmount
from tblCustomers
inner join tblOrders
on tblCustomers.CustID = tblOrders.CustID
where month (OrderDate) = 10
order by CustName
Keát quaû traû veà nhö sau:
CustName OrderID OrderDate .. TotalAmount
---------------------------------------------
CENTURY Hotel 13 2001-10-17 388800000
CENTURY Hotel 14 2001-10-18 518400000
CENTURY Hotel 16 2001-10-17 388800000
CENTURY Hotel 17 2001-10-18 14400000
CENTURY Hotel 18 2001-10-18 12960000
CENTURY Hotel 110 2001-10-18 216000000
Plaza Hotel 12 2001-10-17 403200000
Plaza Hotel 19 2001-10-17 86400000
Plaza Hotel 11 2001-10-17 576000000
Plaza Hotel 15 2001-10-17 288000000
Neáu baïn caàn laáy ra taát caû caùc coät trong caùc baûng coù keát noái laïi vôùi nhau baèng meänh ñeà INNER
JOIN, cuù phaùp treân coù theå vieát laïi nhö sau:
SELECT first_tablename.*,
second_tablename.*
[,next table name]
FROM
INNER JOIN
ON
[INNER JOIN
ON ]
WHERE
ORDER BY
[ASC / DESC]
Ví duï 8-24: INNER JOIN vôùi taát caùc tröôøng lieân quan
/* in ra danh saùch khaùch haøng mua haøng trong thaùng 10 */
Select CustID,CustName,OrderID,
OrderDate,TotalAmount
from tblCustomers
inner join tblOrders
On TblCustomers.CustID=tblOrders.CustID
where month (OrderDate) = 10
order by CustName DESC
Keát quaû traû veà nhö sau:
Giaùo vieân: Phaïm Höõu Khang
COMPUTER LEARNING CENTER WWW.HUUKHANG.COM
CustID CustName .. OrderID ..TotalAmount
------ ---------------------------------------
13 Plaza Hotel .. 11 .. 576000000
13 Plaza Hotel .. 15 .. 288000000
12 Plaza Hotel .. 12 . . 403200000
12 Plaza Hotel .. 19 .. 86400000
16 CENTURY Hotel .. 13 .. 388800000
16 CENTURY Hotel .. 14 .. 518400000
16 CENTURY Hotel .. 16 .. 388800000
16 CENTURY Hotel .. 17 .. 14400000
16 CENTURY Hotel .. 18 .. 12960000
16 CENTURY Hotel .. 110 .. 216000000
Neáu trong nhöõng baûng caàn keát noái coù teân tröôøng (coät) gioáng nhau thì khi thöïc thi phaùt bieåu
SQL daïng SELECT phaûi chæ roõ coät thuoäc baûng naøo. Trong tröôøng hôïp caû hai cuøng laáy döõ lieäu ra thì
baïn caàn chuyeån aùnh xaï teân khaùc cho coät thoâng qua meänh ñeà AS, ví duï nhö:
SELECT first_tablename.CustID as CUSTID,
second_tablename.CustID as CUSTID
FROM
INNER JOIN
ON
WHERE
ORDER BY
[ASC / DESC]
Neáu trong nhöõng baûng caàn keát noái ñoù coù teân tröôøng (coät) gioáng nhau vaø khoâng ñöôïc chæ roõ nhö
tröôøng hôïp treân khi khai baùo trong cô sôû döõ lieäu SQL Server, khi thöïc thi phaùt bieåu SQL daïng
SELECT baïn seõ bò loãi, chaúng haïn nhö:
SELECT first_tablename.*, second_tablename.*
FROM
INNER JOIN
ON
WHERE
ORDER BY
[ASC / DESC]
Server: Msg 209, Lecel 16, State Line 1
Ambiguous column name 'CustID'
Tuy nhieân, vôùi phaùt bieåu treân baïn coù theå thöïc thi trong cô sôû döõ lieäu MySQL. Ngoaøi ra, phaùt
bieåu SQL daïng SELECT söû duïng INNER JOIN baïn coù theå aùnh xaï (alias) teân cuûa baûng thaønh teân
ngaén goïn ñeå deã tham chieáu veà sau.
Thöïc ra phaùt bieåu ALIAS coù yù nghóa gioáng nhö AS vôùi teân coät trong baûng thaønh teân coät khaùc
trong phaùt bieåu SELECT.
Select p.*,s.*
from tablename1
inner join tablename2
On tablename1.field1 = tablename2.field2
Ví duï 8-25: INNER JOIN vôùi aùnh xaï teân baûng
/* in ra danh saùch khaùch haøng mua haøng trong thaùng 10 */
Giaùo vieân: Phaïm Höõu Khang
COMPUTER LEARNING CENTER WWW.HUUKHANG.COM
Select c.CustName,
s.OrderID,s.OrderDate,
s.TotalAmount
from tblCustomer c
inner join tblOrders s
On c.CustID=s.CustID
where month (s.OrderDate) = 10
order by c.CustName DESC
Keát quaû traû veà nhö sau:
CustName OrderID OrderDate .. TotalAmount
----------------------------------------------CENTURY Hotel 13 2001-
10-17 .. 388800000
CENTURY Hotel 14 2001-10-18 .. 518400000
CENTURY Hotel 16 2001-10-17 .. 388800000
CENTURY Hotel 17 2001-10-18 .. 14400000
CENTURY Hotel 18 2001-10-18 .. 12960000
CENTURY Hotel 11 2001-10-18 .. 216000000
Plaza Hotel 12 2001-10-17 .. 403200000
Plaza Hotel 19 2001-10-17 .. 86400000
Plaza Hotel 11 2001-10-17 .. 576000000
Plaza Hotel 15 2001-10-17 .. 288000000
Taát nhieân, baïn cuõng coù theå vieát phaùt bieåu treân öùng vôùi töøng coät muoán laáy ra baèng caùch khai baùo
teân coät.
6.4. Meänh ñeà Left Join
Tröôøng hôïp baïn mong muoán keát quaû laáy ra trong hai baûng keát hôïp nhau theo ñieàu kieän: Nhöõng
maåu tin baûng beân traùi toàn taïi öùng vôùi nhöõng maåu tin ôû baûng beân phaûi khoâng toàn taïi baïn haõy duøng
meänh ñeà LEFT JOIN trong phaùt bieåu SQL daïng SELECT, cuù phaùp coù daïng:
select
from lefttablename
LEFT JOIN righttablename
on lefttabkename.field1=righttablename.field2
Where
Order by
ASC/DESC
Chaúng haïn, baïn choïn ra taát caû caùc saûn phaåm (vôùi caùc coät) coù hay khoâng coù doanh soá baùn trong
thaùng hieän taïi. Moät soá saûn phaåm khoâng baùn trong thaùng seõ coù coät Amount coù coät Amount giaù trò
NULL.
Ví duï 8-26: SELECT duøng LEFT JOIN
/* in ra danh saùch saûn phaåm baùn trong thaùng 10 */
select ItemID,ItemName,Amount
from tblItems
left join tblOrderDetails
on tblItems.ItemID=tblOrderDetails.ItemID
order by Amount
Keát quaû traû veà nhö sau:
ItemID ItemName Amount
----------------------------------------------
12 ASW-60VP NULL
Giaùo vieân: Phaïm Höõu Khang
COMPUTER LEARNING CENTER WWW.HUUKHANG.COM
13 ASW-60VT NULL
14 ASW-660T 120V TW 29340 NULL
14 ASW-685V 120V TW 29440 NULL
15 ASW60VP 220V 34571 NULL
16 ASW-45Z1T1 2960000
17 ASW-45Y1T 127V 14400000
18 ASW-45Y1T 220V 72000000
19 ASW-45Y1T 220V 86400000
20 ASW-45Z1T 15200000
...
6.5. Meänh ñeà Right Join
Ngöôïc laïi vôùi phaùt bieåu SQL daïng SELECT söû duïng meänh ñeà LEFT JOIN laø phaùt bieåu SQL
daïng SELECT söû duïng meänh ñeà RIGHT JOIN seõ xuaát döõ lieäu cuûa baûng beân phaûi cho duø döõ lieäu cuûa
baûng beân traùi khoâng toàn taïi, cuù phaùp coù daïng:
Select
From lefttablename
RIGHT JOIN righttablename
On lefttabkename.field1=righttablename.field2
Where
Order by
ASC/DESC
Trong ví duï sau, baïn coù theå choïn ra taát caû caùc saûn phaåm coù hay khoâng coù doanh soá baùn trong
thaùng hieän taïi. Caùc saûn phaåm khoâng toàn taïi doanh soá baùn seõ khoâng hieän ra.
Ví duï 8-27: SELECT duøng RIGHT JOIN
/* in ra danh saùch saûn phaåm baùn trong thaùng ngaøy 17 */
/* trong phaùt bieåu SELECT naøy coù söû duïng meänh ñeà
WHERE söû duïng phaùt bieåu SELECT khaùc, keát quaû cuûa SELECT trong meänh ñeà WHERE traû veà moät maûng
OrderID */
Select ItemName,Qtty,
Price,Amount
From tblItems
Right join tblOrderDetails
On tblItems.ItemID=tblOrderDetails.ItemID
Where OrderID in (12,14,23,15)
Order by ItemID
Keát quaû traû veà nhö sau:
ItemName Qtty Price Amount
----------------------------------------------
ASW-45Y1T 127V SDIA29350 11000 12000 58400000
ASW-45Y1T 127V SDIA29350 10000 12000 44000000
ASW-45Y1T 127V SDIA 29350 10000 12000 14400000
ASW-45Y1T 127V SDIA 29350 10000 12000 44000000
ASW-45Y1T 127V SDIA 29350 11000 12000 58400000
ASW-45Y1T 127V SDIA 29350 10000 12000 44000000
ASW-45Y1T 127V SDIA 29350 11000 12000 58400000
ASW-45Y1T 220V ARG 29391 6000 12000 86400000
ASW-45Z1T 9000 12000 29600000
ASW-45Z1T 9000 12000 29600000
...
Giaùo vieân: Phaïm Höõu Khang
COMPUTER LEARNING CENTER WWW.HUUKHANG.COM
6.6. Pheùp toaùn hôïp (union)
Union khoâng gioáng nhö nhöõng meänh ñeà JOIN ñaõ giôùi thieäu treân ñaây. Union laø pheùp toaùn duøng
ñeå noái hai hay nhieàu caâu truy vaán daïng Select laïi vôùi nhau.
Ñoái vôùi JOIN, baïn coù theå keát noái döõ lieäu ñöôïc thöïc hieän theo chieàu ngang. Ñoái vôùi Union baïn
keát noái döõ lieäu ñöôïc thöïc hieän theo chieàu doïc.
Ñeå choïn ra nhöõng khaùch haøng thöôøng xuyeân trong tblCustomers, keát quaû traû veà laø danh saùch
caùc khaùch haøng thöôøng xuyeân.
Ví duï 8-28: Khaùch haøng thöôøng xuyeân trong tblCustomers
Select CustID,CustName
from tblCustomers
Keát quaû traû veà nhö sau:
CustID CustName
---------- -----------------
13 New World Hotel
12 Kinh Do Hotel
16 CENTURY Hotel
10 PLAZA Hotel
Ñeå choïn ra nhöõng khaùch haøng vaõng lai trong tblTempCustomers, keát quaû traû veà laø danh saùch
caùc khaùch haøng vaõng lai.
Ví duï 8-29: Khaùch haøng vaõng lai trong tblTempCustomers
Select CustID,CustName
from tblTempCustomers
Keát quaû traû veà nhö sau:
CustID CustName
---------- ---------------------------------
23 Cong ty nuoc giai khat ‘12’COLA
24 Cong ty nuoc giai khat PEPSI
25 Cong ty nuoc giai khat REDBULK
26 Cong ty nuoc giai khat TRIBICO
Neáu duøng pheùp toaùn UNION ñeå keát noái hai baûng treân, keát quaû traû veà laø danh saùch caû hai loaïi
khaùch haøng trong cuøng moät recordset.
Ví duï 8-30: SELECT söû duïng pheùp hôïp UNION
Select CustID,CustName
From tblCustomers
UNION
Select CustID,CustName
From tblTempCustomers
Keát quaû traû veà nhö sau:
CustID CustName
Giaùo vieân: Phaïm Höõu Khang
COMPUTER LEARNING CENTER WWW.HUUKHANG.COM
---------- -----------------------------------
23 Cong ty nuoc giai khat ‘12’COLA
24 Cong ty nuoc giai khat PEPSI
25 Cong ty nuoc giai khat REDBULK
26 Cong ty nuoc giai khat TRIBICO
12 Kinh Do Hotel
10 PLAZA Hotel
16 CENTURY Hotel
13 New World Hotel
Ghi chuù: Khi söû duïng pheùp toaùn Union trong phaùt bieåu SQL daïng Select, baïn caàn löu yù caùc quy
ñònh sau:
¾ Taát caû nhöõng truy vaán trong UNION phaûi cuøng soá coät hay tröôøng. Neáu truy vaán thöù nhaát coù
hai coät thì truy vaán thöù hai ñöôïc söû duïng UNION cuõng phaûi coù hai coät töông töï.
¾ Khi söû duïng UNION, nhöõng coät naøo coù teân coät hay bí danh (alias) môùi thì keát quaû traû veà seõ
coù töïa ñeà (header) cuûa töøng coät vaø teân laø teân coät cuûa truy vaán thöù nhaát.
¾ Kieåu döõ lieäu trong caùc coät cuûa truy vaán 2 töông thích vôùi kieåu döõ lieäu caùc coät töông öùng trong
truy vaán thöù nhaát.
¾ Trong UNION baïn coù theå keát hôïp nhieàu caâu truy vaán laïi vôùi nhau.
¾ Keát quaû hieän ra theo thöù töï cuûa truy vaán töø döôùi leân treân.
6.7.
6.7.1.
6.7.2.
SQL daïng thay ñoåi vaø ñònh nghóa cô sôû döõ lieäu
Phaùt bieåu SQL daïng CREATE
Phaùt bieåu SQL daïng CREATE duøng ñeå taïo cô sôû döõ lieäu vaø nhöõng ñoái töôïng cuûa cô sôû döõ lieäu
trong MySQL, SQL Server, Oracle, ..., chuùng cuù phaùp nhö sau:
CREATE Database
CREATE
¾ OBJECT TYPE: Loaïi ñoái töôïng cuûa cô sôû döõ lieäu ví duï nhö Procedure, Table, View,...
¾ OBJECT NAME: Teân cuûa ñoái töôïng trong cô sôû döõ lieäu SQL nhö sp_IC, tblEmployer, ...
Taïo cô sôû döõ lieäu - Create database
Khi xaây döïng cô sôû döõ lieäu, baïn baét ñaàu töø moâ hình cô sôû döõ lieäu ERD, hay töø moät giai ñoaïn
naøo ñoù trong quy trình phaân tích thieát keá heä thoáng. Ñeå taïo cô sôû döõ lieäu treân MySQL hay SQL Server
baïn söû duïng cuù phaùp sau:
CREATE DATABASE
Cuù phaùp ñaày ñuû cuûa phaùt bieåu taïo cô sôû döõ lieäu nhö sau, neáu baïn söû duïng cô sôû döõ lieäu SQL
Server:
CREATE DATABASE
[ ON [PRIMARY] (
[Name= ,] FileName=
[, SIZE= ]
[, MAXSIZE= ][, FILEGROWTH = <No of
Kylobyte|Percentage>]
)]
Giaùo vieân: Phaïm Höõu Khang
COMPUTER LEARNING CENTER WWW.HUUKHANG.COM
[ LOG ON
(
[Name= ,] FileName=
[, SIZE= ]
[, MAXSIZE= ][, FILEGROWTH = <No of
Kylobyte|Percentage>]
)]
[COLLATE ]
[For Load | For Attach]
6.7.3. Dieãn giaûi CREATE Database trong SQL Server
¾ ON: Duøng ñeå ñònh nghóa nôi chöùa cô sôû döõ lieäu vaø khoâng gian chöùa taäp tin log.
¾ NAME: Duøng ñònh nghóa teân cuûa cô sôû döõ lieäu. Teân naøy duøng tham chieáu khi goïi ñeán cô sôû
döõ lieäu, teân ñöôïc duøng cho quaù trình backup, export, Import, Shrink cô sôû döõ lieäu ñoù.
¾ FILENAME: Teân taäp tin cô sôû döõ lieäu löu trong ñóa cöùng, thoâng thöôøng khi caøi SQL Server
leân oå ñóa naøo thì giaù trò maëc ñònh cho pheùp löu taäp tin ñeán thö muïc ñoù. Tuy nhieân, neáu
muoán baïn cuõng coù theå thay ñoåi vò trí caùc file naøy.
Khi taïo cô sôû döõ lieäu, baïn ñaõ ñònh nghóa vò trí ñaët taäp tin ôû thö muïc naøo thì khoâng theå di
chuyeån moät caùch thuû coâng (nhö duøng Explorer cuûa Windows), vì laøm ñieàu ñoù thaät nguy hieåm nhaát laø
khi döõ lieäu trong cô sôû döõ lieäu ñang coù giaù trò kinh teá.
¾ SIZE: Dung löôïng cuûa cô sôû döõ lieäu khi khôûi taïo chuùng. Thoâng thöôøng giaù trò maëc ñònh laø 1
MB.
¾ Dung löôïng phaûi laø soá nguyeân, coù theå taêng theâm baèng caùch söû duïng thuû tuïc Shrink trong
SQL Server.
¾ MAXSIZE: Dung löôïng lôùn nhaát, khi dung löôïng cô sôû döõ lieäu taêng leân ñeán möùc MaxSize thì
döøng laïi.
Neáu khi dung löôïng baèng MaxSize, caùc chuyeån taùc coù theå bò huyû boû hay traû veà loãi khoâng theå
thöïc hieän ñöôïc, vaø coù theå laøm cho cô sôû döõ lieäu cuûa baïn bò treo.
Ñeå traùnh ñieàu naøy xaûy ra, thì ngöôøi quaûn trò cô sôû döõ lieäu phaûi thöôøng xuyeân theo gioûi quaù trình
taêng dung löôïng cô sôû döõ lieäu theo thôøi gian, ñeå coù bieän phaùp traùnh moïi ruûi ro coù theå xaûy ra.
¾ FILEGROWTH: Dung löôïng khôûi taïo cuøng dung löôïng toái ña cho pheùp taêng trong quaù trình
theâm döõ lieäu vaøo cô sôû döõ lieäu. Nhaèm töï ñoäng hoùa, chuùng ta phaûi thieát laäp quaù trình taêng töï
ñoäng theo chæ soá KB cho tröôùc hay tyû leä phaàn traêm theo dung löôïng ñang coù.
¾ LOG ON: Log on cho pheùp baïn quaûn lyù nhöõng chuyeån taùc xaûy ra trong quaù trình söû duïng cô
sôû döõ lieäu cuûa SQL Server.
Xaây döïng cô sôû döõ lieäu Test
Nhö ñaõ trình baøy ôû treân, sau ñaây ví duï taïo cô sôû döõ lieäu Test coù cuù phaùp nhö sau:
Ví duï 8-31: Taïo cô sôû döõ lieäu Test trong SQL Server
USE master
GO
CREATE DATABASE Test
ON
( NAME = Test,
FILENAME = 'c:\mssql7\data\Testdat.mdf',
Giaùo vieân: Phaïm Höõu Khang
COMPUTER LEARNING CENTER WWW.HUUKHANG.COM
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5 )
LOG ON
( NAME = 'Testlog',
FILENAME = 'c:\mssql7\data\Testlog.ldf',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB )
GO
Ñeå ñôn giaûn hoaù caùc ñoái töôïng Table trong cô sôû döõ lieäu Test, chuùng toâi chæ trình baøy moät vaøi
phaùt bieåu SQL daïng Create Table, caùc Table khaùc baïn coù theå tìm thaáy trong cô sôû döõ lieäu ñính keøm.
Ví duï 8-32: Taïo moät soá baûng trong Test
/* Taïo baûng danh saùch khaùch haøng thöôøng xuyeân */
CREATE TABLE tblcustomers (
CustID int(3) unsigned NOT NULL auto_increment,
Username varchar(20) NOT NULL DEFAULT '' ,
Password varchar(10) NOT NULL DEFAULT '' ,
CustName varchar(50) ,
Address varchar(100) ,
Tel varchar(20) ,
FaxNo varchar(10) ,
Email varchar(50) ,
Contact varchar(50) ,
CountryCode char(3) ,
ProvinceCode char(3) ,
PRIMARY KEY (CustID),
INDEX CustID (CustID)
);
/* Taïo baûng hôïp ñoàng mua haøng qua maïng */
CREATE TABLE tblorders (
OrderID int(3) NOT NULL auto_increment,
OrderDate date ,
CustID int(11) ,
Description varchar(100) DEFAULT '0' ,
TranID tinyint(3) DEFAULT '0' ,
PaymentID tinyint(3) DEFAULT '0' ,
Amount float DEFAULT '0' ,
ShipCost float DEFAULT '0' ,
TotalAmount float DEFAULT '0' ,
PRIMARY KEY (OrderID),
INDEX OrderID (OrderID)
);
/* Taïo baûng hôïp ñoàng chi tieát mua haøng qua maïng */
CREATE TABLE tblorderdetails (
ItemID int(3) unsigned DEFAULT '0' ,
OrderID int(3) unsigned DEFAULT '0' ,
No tinyint(3) unsigned DEFAULT '0' ,
Qtty int(3) unsigned DEFAULT '0' ,
Price int(3) unsigned DEFAULT '0' ,
Discount int(3) unsigned DEFAULT '0' ,
Amount bigint(3) unsigned DEFAULT '0'
);
Giaùo vieân: Phaïm Höõu Khang
COMPUTER LEARNING CENTER WWW.HUUKHANG.COM
Moät soá quy ñònh khi thieát keá Table
6.7.4.
6.7.5.
6.7.6.
Teân coät - Column Name
Ñaët teân coät cuõng gioáng nhö ñaët teân baûng, coù raát nhieàu quy taéc ñaët teân (nhö ñaõ trình baøy ôû treân
phaàn table), nhöng khuyeán khích baïn neân theo moät soá quy taéc cô baûn sau:
¾ Teân coät baét ñaàu chöõ hoa, coøn laïi baèng chöõ thöôøng.
¾ Teân ngaén goïn vaø ñaày ñuû yù nghóa.
¾ Khoâng neân ñaët teân coät coù khoaûng traéng, sau naøy baïn seõ gaëp nhöõng phieàn toaùi khi tham
chieáu ñeán coät ñoù.
¾ Khoâng ñaët teân coät truøng vôùi nhöõng töø khoaù, töø daønh rieâng, vaø nhöõng kyù töï ñaëc bieät nhö
nhöõng pheùp toaùn hay toaùn töû khaùc.
¾ Chuù yù, neân ñaët teân coät cuøng teân nhöõng coät coù quan heä vôùi nhöõng baûng khaùc trong cuøng cô sôû
döõ lieäu, giuùp deã hieåu vaø traùnh bò nhaàm laãn.
Moät soá ngöôøi thích theâm vaøo daáu gaïch chaân (_) ñeå phaân bieät yù nghóa hay teân goïi cuûa coät, ñieàu
naøy laø tuøy vaøo sôû thích cuûa baïn. Tuy nhieân chuùng toâi khoâng thích qui taéc naøy.
Nhöng ñoái vôùi kinh nghieäm laäp thieát keá xaây döïng cô sôû döõ lieäu thì baïn khoâng neân duøng daáu
gaïch döôùi _, vaø dó nhieân trong nhieàu tröôøng hôïp khaùc baïn seõ caûm thaáy khoù chòu khi theâm moät daáu _
trong teân cuûa ñoái töôïng cuûa cô sôû döõ lieäu.
Maëc duø khoâng coù vaán ñeà gì cho cuù phaùp hay caùc phaùt bieåu tham chieáu ñeán chuùng, nhöng baïn seõ
thaáy taïi sao chuùng ta khoâng neân duøng daáu gaïch chaân (_) khi ñaët teân ñoái töôïng hay teân cô sôû döõ lieäu
trong MySQL.
¾ Neáu baïn ñaët teân coù daáu _ ,baïn phaûi toán thôøi gian hay naêng löôïng cho haønh ñoäng taïo ra daáu _
¾ Trong chöøng möïc hay giôùi haïn naøo ñoù do hieäu öùng cuûa Font chöõ coù theå phaùt sinh loãi seõ gaây
ra nhaàm laãn cho ngöôøi laäp trình.
¾ Noùi toùm laïi laø baïn seõ maát theâm thôøi gian löu taâm ñeán chuùng.
Kieåu döõ lieäu - Data type
Nhö ñaõ trình baøy caùc laïi döõ lieäu trong phaàn treân, khi xaây döïng cô sôû döõ lieäu, taát caû nhöõng
tröôøng trong baûng caàn phaûi coù kieåu döõ lieäu cuï theå. Vaán ñeà quan troïng laø choïn kieåu döõ lieäu naøo cho
phuø hôïp vôùi döõ lieäu maø ngöôøi duøng seõ nhaäp vaøo.
Ñeå thieát keá döõ lieäu phuø hôïp vôùi thöïc teá, ngoaøi tính öùng duïng hôïp vôùi ngöõ caûnh baïn cuõng caàn
quan taâm ñeán kieåu döõ lieäu töông thích vaø chieàu daøi cuûa töøng coät. Chaúng haïn nhö:
[CustID] [varchar] (10)
/* hay */
[CustID] int
Giaù trò maëc ñònh - Default
Thoâng thöôøng khi taïo ra moät coät trong baûng ñoâi khi chuùng ta caàn aùp duïng giaù trò maëc ñònh,
khoâng chæ cho tröôøng hôïp soá lieäu khoâng nhaäp töø beân ngoaøi maø coøn cho caùc coät töï ñoäng coù giaù trò töï
sinh. Vôùi nhöõng lyù do nhö vaäy, chuùng ta caàn coù moät soá giaù trò maëc ñònh cho nhöõng coät caàn thieát, ví duï
:
¾ Neáu coät ñoù laø soá chuùng ta coù giaù trò maëc ñònh laø 0
Giaùo vieân: Phaïm Höõu Khang
COMPUTER LEARNING CENTER WWW.HUUKHANG.COM
¾ Neáu coät ñoù laø ngaøy thaùng chuùng ta coù giaù trò maëc ñònh laø ngaøy naøo ñoù (nhö 0000-00-00 laø
CurDate())
¾ Neáu coät ñoù coù giaù trò laø 0 hoaëc 1, baïn coù theå khai baùo giaù trò maëc ñònh laø 0 hoaëc 1
¾ Neáu coät ñoù laø chuoãi chuùng ta coù giaù trò maëc ñònh nhö laø 'A'
6.7.7. Soá töï ñoäng auto_increment
auto_increment laø khaùi nieäm cöïc kyø quan troïng trong MySQL (töông ñöông vôùi Identity trong
SQL Server, Autonumber trong MS Access). Khi baïn muoán moät coät coù giaù trò taêng töï ñoäng nhö
AutoNumber/Identity, baïn neân ñònh nghóa coät ñoù nhö auto_increment,.
Khi söû duïng auto_increment laøm soá taêng töï ñoäng thì kieåu döõ lieäu laø soá nguyeân hoaëc soá nguyeân
lôùn.
Trong tröôøng hôïp, baïn khai baùo soá töï ñoäng trong SQL Server, baïn caàn phaûi khai baùo theâm caùc
thoâng soá nhö seed. Seed laø giaù trò khôûi ñaàu khi SQL Server töï ñoäng taêng giaù trò, Increament laø böôùc
taêng, noù cho bieát moãi laàn taêng caàn bao nhieâu giaù trò.
Vì duï khi taïo auto_increment cho coät ItemID [Int] auto_increment, nghóa laø baét ñaàu soá 1 vaø moãi
laàn taêng 1 soá. Keát quaû baïn seõ coù laø 1,2,3,4, ...n.
Trong phaùt bieåu SQL cuûa MySQL, ñeå taïo baûng coù gaù trò taêng töï ñoäng baïn chæ caàn khai baùo teân
coät, kieåu döõ lieäu Int (Integer) vaø auto_increment nhö sau:
IDNO Int auto_increment NOT NULL
Trong giao dieän ñoà hoïa baïn chæ caàn check vaøo tuyø choïn AutoIncreament nhö hình 8-10.
Hình 8-10: Choïn auto_increment
Giaùo vieân: Phaïm Höõu Khang
COMPUTER LEARNING CENTER WWW.HUUKHANG.COM
NULL / NOT NULL
Ñaây laø traïng thaùi cuûa moät coät trong baûng cho pheùp chaáp nhaän giaù trò NULL hay khoâng? Neáu
baïn chæ ra raøng buoäc giaù trò NOT NULL thì baét buoäc phaûi coù giaù trò trong coät naøy moãi khi maåu tin
ñöôïc nhaäp vaøo.
Ñoái vôùi moät soá kieåu döõ lieäu khoâng cho pheùp NULL baïn neân thieát laäp giaù trò maëc ñònh cho coät
ñoù, ví duï nhö kieåu döõ lieäu bit khoâng cho pheùp NULL.
Trong phaùt bieåu SQL taïo baûng, baïn chæ caàn khai baùo NULL hay NOT NULL sau kieåu döõ lieäu
cuûa coät ñoù. Trong giao dieän ñoà hoïa chæ caàn ñaùnh daáu choïn vaøo tuyø choïn Not NULL nhö hình 8-10.
6.8. Thay caáu truùc ñoái töôïng baèng ALTER
Khi chuùng ta caàn thieát phaûi söûa ñoåi moät phaàn caáu truùc cuûa caùc ñoái töôïng nhö table (view, hay
SP trong SQL Server) vì muïc ñích naøo ñoù, thì Baïn söû duïng phaùt bieåu ALTER ñeå thay ñoåi caáu truùc cuûa
ñoái töôïng hieän coù:
ALTER
Khi moät baûng toàn taïi trong cô sôû döõ lieäu, do nhu caàu caàn thieát phaûi thay ñoåi caáu truùc baûng, baïn
söû duïng phaùt bieåu ALTER TABLE cuøng caùc tham soá cuûa chuùng nhö cuù phaùp sau:
ALTER TABLE table alteration [,alteration]
Chaúng haïn, baïn coù theå söû duïng phaùt bieåu ALTER TABLE ñeå theâm moät coät teân Activate vôùi
kieåu döõ lieäu TinyInt coù giaù trò maëc ñònh laø 1.
Ví duï 8-33: Theâm moät coät teân Activate vaøo baûng tblOrders
ALTER TABLE tblorders
ADD Activate TINYINT DEFAULT "1"
Khi thay ñoåi thieát laäp giaù trò maëc ñònh cho coät baïn neân quan taâm ñeán giaù trò maëc ñònh ñoù coù
phuø hôïp cho nhöõng maåu tin ñang toàn taïi hay khoâng.
Muoán thay ñoåi giaù trò maëc ñònh cuûa coät cho nhöõng maåu tin ñang toàn taïi, baïn söû duïng ñeán meänh
ñeà phuï nhö trong ví duï sau:
Ví duï 8-34: Thieát laäp giaù trò maëc ñònh trong baûng tblOrders
ALTER TABLE tblorders
CHANGE OrderDate
OrderDate DATETIME
DEFAULT "0000-00-00"
Thay ñoåi kieåu döõ lieäu töø Date dang DateTime, baïn coù theå khai baùo nhö ví duï 4-35 sau:
Ví duï 8-35: Thay ñoåi kieåu döõ lieäu
ALTER TABLE tblorders
CHANGE OrderDate
OrderDate DATE
DEFAULT "0000-00-00 00:00:00"
Giaùo vieân: Phaïm Höõu Khang
COMPUTER LEARNING CENTER WWW.HUUKHANG.COM
Maëc khaùc, baïn cuõng coù theå taïo hay thay ñoåi baûng trong maøn hình MySQL-Front. Chæ caàn choïn
ngaên Database | R-Click | Create New Table, cöûa soå xuaát hieän nhö hình 8-11.
Hình 8-11: Giao dieän taïo baûng baèng MySQL-Front
6.9. Phaùt bieåu SQL daïng DROP
Drop laø phaùt bieåu thöïc hieän pheùp xoaù. DROP duøng ñeå xoaù ñoái töôïng cuûa cô sôû döõ lieäu nhö baûng,
cô sôû döõ lieäu, ...Cuù phaùp cuûa phaùt bieåu DROP:
DROP [, .... n]
Baïn coù theå xoaù cô sôû döõ lieäu, baèng caùch khai baùo nhö sau:
Drop Database Test
/* Phaùt bieåu DROP TABLE chæ roõ baûng naøo caàn xoaù,
neáu xoaù nhieàu baûng thì baïn caàn duøng daáu phaåy (,) */
DROP TABLE tblCustomers, tblSuppliers
Ngoaøi ra, baïn cuõng coù theå duøng MySQl-Front ñeå xoaù baûng hay caùc ñoái töôïng Table trong cô sôû
döõ lieäu chæ ñònh. Neáu choïn nhieàu baûng cuøng moät luùc baïn söû duïng phím Control hay Shift nhö sau:
Giaùo vieân: Phaïm Höõu Khang
COMPUTER LEARNING CENTER WWW.HUUKHANG.COM
Hình 8-12: Choïn ñoái töôïng ñeå xoaù baûng trong MySQL-Front
7. TAÏO KÒCH BAÛN SQL- SQL SCRIPTS
Thoâng thöôøng khi xaây döïng cô sôû döõ lieäu ñeå phaùt trieån öùng duïng, ñoâi khi baïn caàn chuyeån cô sôû
döõ lieäu töø maùy naøy sang maùy khaùc, hay töø khu vöïc naøy hay ñeán khu vöïc khaùc.
Coù raát nhieàu caùch ñeå laøm ñieàu naøy, ôû ñaây chuùng toâi giôùi thieäu ñeán caùc baïn moät coâng cuï taùi taïo
laïi cô sôû döõ lieäu môùi töø kòch baûn cuûa cô sôû döõ lieäu goác.
Kòch baûn SQL (SQL Script) laø toång hôïp taát caû caùc phaùt bieåu SQL duøng ñeå taïo ra cô sôû döõ lieäu
trong quaù trình xaây döïng chuùng, chuùng löu tröõ döôùi daïng vaên baûn coù teân môû roäng .sql (cautruc.sql).
Coâng cuï naøy taïo kòch baûn cho taát caû caùc ñoái töôïng cuûa cô sôû döõ lieäu vôùi nhöõng thuoäc tính caên
baûn. Tuy nhieân, neáu baïn choïn vaøo tuyø choïn Data, SQL Script bao goàm caùc phaùt bieåu SQL daïng Insert
cuøng vôùi döõ lieäu trong baûng.
Tröôùc tieân baïn coù theå nhaän thaáy cöûa soå coâng cuï naøy trong MySQL-Front, baèng caùch choïn teân cô
sôû döõ lieäu Test, sau ñoù choïn Tools / Im-Export / Export Table, cöûa soå xuaát hieän nhö hình 8-13 sau:
Giaùo vieân: Phaïm Höõu Khang
COMPUTER LEARNING CENTER WWW.HUUKHANG.COM
Hình 8-13: Taïo kòch baûn trong MySQl-Front
KEÁT CHÖÔNG
Trong chöông naøy, chuùng toâi ñaõ giôùi thieäu vôùi baïn haàu heát caùc phaùt bieåu SQL thuoäc loaïi ñònh
nghóa cô sôû döõ lieäu, thao taùc döõ lieäu nhö Select, Insert, Delete vaø Update.
Phaùt bieåu SQL daïng Select vôùi caùc meänh ñeà nhö JOIN cuøng pheùp toaùn giöõa hai hay nhieàu baûng
trong phaùt bieåu SQL daïng SELECT.
Ngoaøi ra, chuùng toâi cuõng trình baøy hai loaïi phaùt bieåu SQL daïng ñònh nghóa vaø thay ñoå cô sôû döõ
lieäu taïo nhö CREATE vaø ALTER, DROP.
Giaùo vieân: Phaïm Höõu Khang
PHP VAØ DATABASE 9-1
COMPUTER LEARNING CENTER WWW.HUUKHANG.COM
Moân hoïc: PHP
BAØI 9: PHP VAØ DATABASE
Ñeå keát noái cô sôû döõ lieäu mySQL trong PHP, chuùng ta coù nhieàu caùch
öùng vôùi nhieàu phöông thöùc keát noái cô sôû döõ lieäu, trong phaàn naøy chuùng ta
taäp trung tìm hieåu caùch keát noái cô sôû döõ lieäu mySQL töø PHP baèng chính
goùi cuûa noù.
Nhöõng vaán ñeà chính seõ ñöôïc ñeà caäp trong baøi hoïc naøy
9 Khai baùo keát noái cô sôû döõ lieäu
9 Theâm maåu tin
9 Caäp nhaät maåu tin.
9 Xoaù maåu tin
9 Truy vaán döõ lieäu
1. KEÁT NOÁI CÔ SÔÛ DÖÕ LIEÄU
Ñeå keát noái cô sôû döõ lieäu mySQL baïn söû duïng khai baùp nhö sau:
<?php
$link = mysql_connect ("localhost", "root", "")
or die ("Could not connect to MySQL Database");
mysql_select_db("TestDB", $link);
?>
Trong ñoù khai baùo sau laø keát noái cô sôû döõ lieäu mySQL vôùi teân server/ip cuøng vôùi username vaù
password:
mysql_connect ("localhost", "root", "")
Vaø mysql_select_db("TestDB", $link); ñeå choïn teân cô sôû döõ lieäu sau khi môû keát noái cô sôû döõ lieäu, neáu
bieán $link coù giaù trò laø false thì keát noái cô sôû döõ lieäu khoâng thaønh coâng.
Sau khi môû keát noái cô sôû döõ lieäu maø khoâng söû duïng tìh baïn coù theå ñoùng keát noái cô sôû döõ lieäu vôùi cuù
phaùp nhö sau:
mysql_close($link);
Chaúng haïn, baïn khai baùo trang connection.php ñeå keát noái cô sôû döõ lieäu vaø ñoùng keát noái ngay
sau khi môû thaønh coâng.
::Welcome to PHP and mySQL
Mo va dong ket noi CSDL MySQL
<?php
$link = mysql_connect ("localhost", "root", "")
or die ("Could not connect to MySQL Database");
mysql_select_db("InterShop", $link);
mysql_close($link);
PHP VAØ DATABASE 9-2
COMPUTER LEARNING CENTER WWW.HUUKHANG.COM
?>
2. THEÂM MAÅU TIN
Ñeå theâm maåu tin, baïn söû duïng haøm mysql_query(chuoãi Insert). Chaúng haïn, chuùng ta khai baùo
trang insert.php ñeå theâm maåu tin vaøo baûng tblships coù hai coät döõ lieäu laø ShipID vaø ShipName nhö ví
duï trong trang insert.php.
::Welcome to PHP and mySQL
Them mau tin
<?php
require("dbcon.php");
$sql="insert into tblships values('A01','Testing')";
$result = mysql_query($sql,$link);
$affectrow=0;
if($result)
$affectrow=mysql_affected_rows();
mysql_close($link);
?>
So mau tin them vao
Trong ñoù, baïn söû duïng haøm mysql_query vôùi hai tham soá laø $sql vaø $link. Keát quaû traû veà laø soá
maåu tin thöïc thi. Ngoaøi ra, baïn coù theå söû duïng ñoaïn keát noái cô sôû döõ lieäu trong taäp tin dbcon.php nhö
ví duï sau:
<?php
$link = mysql_connect ("localhost", "root", "")
or die ("Could not connect to MySQL Database");
mysql_select_db("Test", $link);
?>
Trong tröôøng hôïp cho pheùp ngöôøi söû duïng theâm maåu tin thì baïn thieát keá form yeâu caàu ngöôøi söû
duïng nhaäp hai giaù trò sau ñoù submit ñeán trang keá tieáp ñeå thöïc thi vieäc theâm gt sau ñoù submit ñeán
trang keá tieáp ñeå thöïc thi vieäc theâm giaù trò vöøa nhaäp vaøo cô sôû döõ lieäu nhö hình 9-1.
PHP VAØ DATABASE 9-3
COMPUTER LEARNING CENTER WWW.HUUKHANG.COM
Hình 9-1: Theâm maåu tin
Ñeå laøm ñieàu naøy, tröôùc tieân baïn khai baùo trang them.php, trong ñoù khai baùo ñoaïn javascript ñeå
kieåm tra döõ lieäu nhaäp nhö sau:
function checkInput()
{
if (document.frmPHP.txtID.value=="")
{
alert("Invalid ID, Please enter ID");
document.frmPHP.txtID.focus();
return false;
}
if (document.frmPHP.txtName.value=="")
{
alert("Please enter Name");
document.frmPHP.txtName.focus();
return false;
}
return true;
}
Keá ñeán khai baùo theå form vaø hai theû input laïi text yeâu caàu ngöôøi söû duïng nnaäp ID vaø Name nhö
sau:
<form name="frmPHP" method="post"
action="doinsert.php"
onsubmit="return checkInput();">
Please enter ID and Name
ID:
<input type="text" name="txtID"
size="25" maxlength="3" class="textbox">
PHP VAØ DATABASE 9-4
COMPUTER LEARNING CENTER WWW.HUUKHANG.COM
Name:
<input type="text" name="txtName"
size="25" maxlength="50" class="textbox">
<input type="submit"
value="Submit" class="button">
Löu yù raèng, baïn khai baùo soá kyù töï lôùn nhaát cho pheùp nhaäp baèng vôùi kích thöôùc ñaõ khai baùo
trong cô sôû döõ lieäu öùng vôùi thuoäc tính maxlength.
Khi ngöôøi söû duïng nhaäp hai giaù trò vaø nhaán nuùt submit, trang keá tieáp ñöïôc trieäu goïi. Trang naøy
laáy giaù trò nhaäp baèng caùch söû duïng bieán form hay $HTTP_POST_VARS. Ñoái vôùi tröôøng hôïp naøy
chuùng ta söû duïng bieán form nhö trang doinsert.php.
::Welcome to PHP and mySQL
Them mau tin
<?php
$affectrow=0;
require("dbcon.php");
$sql="insert into tblships(ShipID,ShipName) ";
$sql .=" values('".$txtID."','".$txtName."')";
$result = mysql_query($sql,$link);
if($result)
$affectrow=mysql_affected_rows();
mysql_close($link);
?>
So mau tin them vao
3. CAÄP NHAÄT MAÅU TIN
Ñoái vôùi tröôøng hôïp caäp nhaät maåu tin, baïn cuõng söû duïng haøm mysql_query vôùi phaùt bieåu Update
thay ví Insert nhö treân, ví duï chuùng ta khai baùo trang update.php ñeå caäp nhaät maåu tin trong baûng
tblShips vôùi teân laø UpdateTesting khi maõ coù giaù trò laø A01.
::Welcome to PHP and mySQL
Cap nhat mau tin
<?php
require("dbcon.php");
$sql="Update tblships set ShipName='UpdateTesting' ";
$sql.=" where ShipID='A01'";
$result = mysql_query($sql,$link);
$affectrow=0;
if($result)
PHP VAØ DATABASE 9-5
COMPUTER LEARNING CENTER WWW.HUUKHANG.COM
$affectrow=mysql_affected_rows();
mysql_close($link);
?>
So mau tin cap nhat
Löu yù raèng, ñeå bieát soá maåu tin ñaõ thöïc thi bôûi phaùt bieåu SQL baïn söû duïng haøm
mysql_affected_rows.
if($result)
$affectrow=mysql_affected_rows();
Töông töï nhö treân, baïn coù theå thieát keá form cho pheùp ngöôøi söû duïng caäp nhaät döõ lieäu baèng caùch
thieát keá form yeâu caàu ngöôøi söû duïng nhaäp maõ vaø teân caäp nhaän.
Tröôùc tieân thieát keá from cho pheùp nhaäp döõ lieäu ñeå caäp nhaät nhö ví duï trang capnhat.php, sau
khi hoïc phaàn truy vaán xong, thaqy vì nhaäp maõ baïn cho pheùp ngöôøi söû duïng choïn trong danh saùch ñaõ
coù nhö hình 9-2.
Hình 9-2: Caäp nhaät döõ lieäu
Sau khi ngöôøi söû duïng nhaán nuùt submit, trang doupdate.php seõ trieäu goïi, keát quaû traû veà 1 hay 0
maåu tin.
::Welcome to PHP and mySQL
Cap nhat mau tin
<?php
$affectrow=0;
require("dbcon.php");
$sql="update tblships set ShipName='";
$sql .=$txtName."' where ShipID='".$txtID."'";
$result = mysql_query($sql,$link);
if($result)
$affectrow=mysql_affected_rows();
mysql_close($link);
?>
PHP VAØ DATABASE 9-6
COMPUTER LEARNING CENTER WWW.HUUKHANG.COM
So mau tin cap nhat
4. XOAÙ MAÅU TIN
Töông töï nhö vaäy khi xoaù maåu tin, baïn chæ thay ñoåi phaùt bieåu SQL daïng Delete nhö ví duï trong
taäp tin delete.php.
::Welcome to PHP and mySQL
Xoa mau tin
<?php
require("dbcon.php");
$sql="Delete From tblships where ShipID='A01'";
$result = mysql_query($sql,$link);
$affectrow=0;
if($result)
$affectrow=mysql_affected_rows();
mysql_close($link);
?>
So mau tin da xoa
Ñoái vôùi tröôøng hôïp xoaù thì ñôn giaûn hôn, baïn cæh caàn bieát ñöôïc maõ caàn xoaù, chính vì vaäy trong
tröôøng hôïp naøy chuùng ta chæ caàn thieát keá trang cho pheùp nhaäp maõ nhö hình 9-3.
Hình 9-3: Xoaù 1 maåu tin
Sau khi nhaäp maõ caàn xoaù, neáu ngöôøi söû duïng nhaán nuùt Delete laäp töùc trang dodelete.php seõ
trieäu goïi vaø xoaù maåu tin töông öùng.
::Welcome to PHP and mySQL
PHP VAØ DATABASE 9-7
COMPUTER LEARNING CENTER WWW.HUUKHANG.COM
Xoa mau tin
<?php
$affectrow=0;
require("dbcon.php");
$sql="delete from tblships ";
$sql .=" where ShipID='".$txtID."'";
$result = mysql_query($sql,$link);
if($result)
$affectrow=mysql_affected_rows();
mysql_close($link);
?>
So mau tin xoa
5. TRUY VAÁN DÖÕ LIEÄU
Ñeå truy vaán döõ lieäu baïn söû duïng haøm mysql_num_rows ñeå bieát ñöôïc soá maåu tin traû veà vaø haøm
mysql_fetch_array ñeå ñoïc töøng maåu tin vaø maûng sau ñoù trình baøy giaù trò töø maûng naøy. Chaúng haïn,
chuùng ta taïo moät taäp tin lietke.php duøng ñeå lieät keâ danh saùch maåu tin trong baûng tblShips nhö hình
9-4.
Hình 9-4: Lieät keâ maåu tin
Ñeå laøm ñieàu naøy, baïn khai baùo ñoaïn chöông trình ñoïc baûng döõ lieäu töông töï nhö ví duï sau:
<?php
require("dbcon.php");
$totalRows = 0;
$stSQL ="select * from tblShips";
$result = mysql_query($stSQL, $link);
$totalRows=mysql_num_rows($result);
?>
Sau ñoù, duøng haøm mysql_fetch_array ñeå ñoïc töøng maåu tin vaø in ra nhö sau:
<?php
if($totalRows>0)
{
$i=0;
while ($row = mysql_fetch_array ($result))
{
$i+=1;
PHP VAØ DATABASE 9-8
COMPUTER LEARNING CENTER WWW.HUUKHANG.COM
?>
Trong tröôøng hôïp soá maåu tin traû veà laø 0 thì in ra caâu thoâng baùo khoâng tìm thaáy nhö sau:
<?php
}
}else{
?>
Oop! Ship not found!
<?php
}
?>
6. KEÁT LUAÄN
Trong baøi naøy, chuùng ta taäp trung tìm hieåu caùch keát noái cô sôû döõ lieäu, theâm, xoaù caäp nhaät vaø
lieät keâ maåu tin. Trong baøi keá tieáp chuùng ta tìm hieåu nhieàu caùc trình baøy döõ lieäu, xoaù maåu tin theo
daïng maûng.
PHP VAØ DATABASE 9-1
COMPUTER LEARNING CENTER WWW.HUUKHANG.COM
Moân hoïc: PHP
BAØI 10: XOAÙ, CAÄP NHAÄT DÖÕ LIEÄU DAÏNG MAÛNG
Trong baøi tröôùc chuùng ta ñaõ laøm quen vôùi caùch xoaù maåu tin trong cô
sôû döõ lieäu mySQL. Ñoái vôùi tröôøng hôïp xoaù moät luùc nhieàu maåu tin, chuùng ta
phaûi xaây döïng trang PHP coù söû duïng theû input daïng checkbox.
Nhöõng vaán ñeà chính seõ ñöôïc ñeà caäp trong baøi hoïc naøy
9 Lieät keâ döõ lieäu daïng danh saùch
9 Xoaù nhieàu maåu tin
9 Caäp nhaät nhieàu maåu tin
1. LIEÄT KEÂ DÖÕ LIEÄU
Ñeå xoaù nhieàu maåu tin cuøng moät luùc, tröôùc tieân baïn khai baùo trang PHP ñeå lieät keâ danh saùch maåu
tin trong maûng döõ lieäu chaèng haïn, moãi maåu tin xuaát hieän moät checkbox töông öùng. Checkbox naøy
coù giaù trò laø maõ nhaän daïng cuûa maåu tin ñoù. Trong tröôøng hôïp naøy chuùng ta duøng coät khoaù cuûa
maõ chuyeån haøng (SubCateID) trong baûng tblSubCategories ñònh nghóa trong trang lietke.php nhö
hình 10-1.
PHP VAØ DATABASE 9-2
COMPUTER LEARNING CENTER WWW.HUUKHANG.COM
Hình 10-1: Lieät keâ danh saùch laïi saûn phaåm
Ñeå cho pheùp laáy ñöôïc nhieàu giaù trò choïn cuûa saûn phaåm nhö hình tren, baïn khai baùo caùc checkbox
naøy cuøng teân (giaû söû teân laø chkid) vaø giaù trò trò laø SubCateID cuûa moãi saûn phaåm nhö ví duï 10-1
trong trang lietke.php.
<?php
if($totalRows>0)
{
$i=0;
while ($row = mysql_fetch_array ($result))
{
$i+=1;
?>
<input type=checkbox name=chkid
value="">
">
<?php
}
?>
<input type=button value="New"
onclick="window.open('them.php',target='_main')">
Tong so mau tin
<?php
}else{
?>
Oop! Ship not found!
<?php
}
?>
Trong ñoù, hai khai baùo sau:
Cho bieát baïn submit töø trang naøo vaø loaïi xoaù nhieàu maåu tin hay moät maåu tin ñoái vôùi baûng töông
öùng. Muïc ñích cuûa vaán ñeà naøy laø trang delete söû duïng chung cho nhieàu baûng khaùc nhau vaø töø trang
lieät keâ (xoaù nhieàu) hoaëc töø trang edit (1 maåu tin cuï theå).
Ngoaøi ra, chuùng ta khai baùo ñeå nhaän giaù trò choïn treân
caùch checkbox baèng caùch khai baùo ñoaïn javascript nhö sau:
function calculatechon()
PHP VAØ DATABASE 9-3
COMPUTER LEARNING CENTER WWW.HUUKHANG.COM
{
var strchon="";
var alen=document.frmList.elements.length;
var buttons=1;
alen=(alen>buttons)?document.frmList.chkid.length:0;
if (alen>0)
{
for(var i=0;i<alen;i++)
if(document.frmList.chkid[i].checked==true)
strchon+=document.frmList.chkid[i].value+",";
}else
{
if(document.frmList.chkid.checked==true)
strchon=document.frmList.chkid.value;
}
document.frmList.chon.value=strchon;
return isok();
}
Tuy nhieân, do nhieàu loaïi saûn phaåm thuoäc caùc nhoùm saûn phaåm khaùc nhau, chính vì vaäy baïn khai baùo
danh saùch nhoùm saûn phaåm treân theû select cho pheùp ngöôøi söû duïng lieät keâ saùch theo nhoùm saûn
phaåm nhö hình 10-2.
Hình 10-2: Lieät keâ danh saùch loaïi saùch
Ñeå lieät keâ danh saùch nhoùm trong baûng tblCategories, baèng caùch khai baùo phöông thöùc nhaän chuoãi
SQL daïng Select vaø giaù trò maëc ñònh traû veà nhieàu phaàn töû theû option trong taäp tin database.php
nhö ví duï 10-2.
PHP VAØ DATABASE 9-4
COMPUTER LEARNING CENTER WWW.HUUKHANG.COM
function optionselected($stSQL,$item,$links)
{
$results = mysql_query($stSQL, $links);
$totalRows=mysql_num_rows($results);
$strOption="";
$strOption .="--Select--";
if($totalRows>0)
{
while ($row = mysql_fetch_array ($results))
{
$strOption .="<option value=\"" ;
$strOption .=$row["ID"]."\"";
if($row["ID"]==$item)
$strOption .=" selected ";
$strOption .= ">".$row["Name"];
$strOption .="";
}
}
return $strOption;
}
Sau ñoù, goïi phöông thöùc naøy trong trang lietketheonhom.php nhö ví duï 10-3.
<?php
require("dbcon.php");
require("database.php");
$id="";
if (isset($cateid))
$id=$cateid;
$stSQL ="select CateID As ID, CateName as Name from tblCategories ";
$result = mysql_query($stSQL, $link);
$totalRows=mysql_num_rows($result);
$strOption=optionselected($stSQL,$id,$link);
?>
Category:
Laàn ñaàu tieân baïn coù theå choïn maëc ñònh moät nhoùm hoaëc lieät keâ taát caû, khi ngöôøi söû duïng choïn nhoùm
saûn phaåm naøo ñoù thì trang lietketheonhom.php seõ lieät keâ danh saùch loaïi saùch cuûa nhoùm saùch ñoù.
Ñeå laøm ñieàu naøy, baïn khai baùo theû form vôùi theû select nhö ví duï 10-4.
Category:
Khi ngöôøi söû duïng choïn caùc maåu tin nhö hình 10-2 vaø nhaán nuùt Delete, döïa vaøo giaù trò cuûa nuùt coù
teân action (trong tröôøng hôïp naøy laø Delete), baïn coù theå khai baùo bieán ñeå laáy giaù trò choïn baèng caùch
khai baùo nhö ví duï 10-5.
$strid=$chon;
PHP VAØ DATABASE 9-5
COMPUTER LEARNING CENTER WWW.HUUKHANG.COM
$strid=str_replace(",","','",$strid);
Döïa vaøo theû hidden khai baùo trong caùc trang trình baøy danh saùch (chaúng aïn lietketheonhom.php)
maåu tin nhö sau:
Baïn coù theå bieát töø trang naøo goïi ñeán trang dodelete.php ñeå quay trôû veà khi thöïc hieän xong taùc vuï xöû
lyù.
Ngoaøi ra, döïa vaøo giaù trò cuûa nuùt action ñeå thöïc hieän phaùt bieåu SQL. Chaúng haïn, trong tröôøng hôïp
naøy neáu ngöôøi söû duïng nhaán huùt Delete thì baïn khai baùo nhö ví duï 10-6 sau:
switch($strfrom)
{
case "subcategories":
$stSQL ="delete from tblsubcategories where SubCateID in('".$strid."')";
$strlocation="Location:lietketheonhom.php";
break;
case "categories":
$stSQL ="delete from tblcategories where CateID in('".$strid."')";
$strlocation="Location:nhom.php";
break;
}
Sau ñoù, baïn coù theå thöïc thi phaùt bieåu SQL vöøa khai baùo ôû treân nhö ví duï 10-7.
if($stSQL!="")
{
$result = mysql_query($stSQL, $link);
}
Löu yù raèng, baïn cuõng neân khai baùo try catch trong khi laøm vieäc vôùi cô sôû döõ lieäu. Ngoaøi ra, baïn
cuõng phaûi xaùc nhaän tröôùc khi thöïc thi haønh ñoäng xoaù maåu tin choïn baèng caùch khai baùo ñoaïn
Javascript nhö sau:
function isok()
{
return confirm('Are you sure to delete?');
}
Sau ñoù goïi trong bieán coá onsubmit cuûa form nhö sau:
2. CAÄP NHAÄT NHIEÀU MAÅU TIN
Töông töï nhö tröôøng hôïp Delete, khi baïn duyeät (approval) moät soá maåu tin theo moät coät döõ lieäu naøo
ñoù, chaúng haïn, trong tröôøng hôïp naøy chuùng ta cho pheùp söû duïng nhöõng saûn phaåm ñaõ qua söï ñoàng yù
cuûa nhaø quaûn lyù thì coät döõ lieäu Activate cuûa baûng tbltems coù giaù trò laø 1.
Ñeå laøm ñieàu naøy, tröôùc tieân baïn lieät keâ danh saùch saûn phaåm nhö hình 10-3.
PHP VAØ DATABASE 9-6
COMPUTER LEARNING CENTER WWW.HUUKHANG.COM
Hình 10-3: Lieät keâ danh saùch saûn phaåm duyeät hay chöa
Töông töï nhö trong tröôøng hôïp delete, baïn khai baùo trang doUpdate nhö sau:
::Welcome to PHP and mySQL
Cap nhat mau tin
<?php
require("dbcon.php");
$strid=$chon;
$strid=str_replace(",","','",$strid);
$strfrom="";
if(isset($from_))
{
$strfrom=$HTTP_POST_VARS{"from_"};
}
$strtype="";
if(isset($type))
{
$strtype=$HTTP_POST_VARS{"type"};
}
$stSQL="";
if($strfrom"")
{
switch($strfrom)
{
case "items":
$stSQL ="update tblItems set Activate=1 where ItemID
in('".$strid."')";
PHP VAØ DATABASE 9-7
COMPUTER LEARNING CENTER WWW.HUUKHANG.COM
break;
}
if($stSQL!="")
{
$result = mysql_query($stSQL, $link);
if($result)
$affectrow=mysql_affected_rows();
mysql_close($link);
}
}
?>
So mau tin cap nhat
3. KEÁT LUAÄN
Trong baøi naøy, chuùng ta tìm hieåu chöùc naêng xoaù, caäp nhaät nhieàu maåu tin baèng caùch söû duïng theû
input loaïi checkbox cuøng teân vaø khaùc giaù trò, baøi keá tieáp chuùng ta tieáp tuïc tìm hieåu veà chöùc naêng
ñaêng nhaäp trong PHP.
Các file đính kèm theo tài liệu này:
- canbanphp_9493_5959.pdf