Đăng ký Đăng nhập
Trang chủ Công nghệ thông tin Kỹ thuật lập trình Hướng dẫn lập trình php - phần 2...

Tài liệu Hướng dẫn lập trình php - phần 2

.PDF
47
375
58

Mô tả:

LAÄP TRÌNH WEB ĐỘNG VÔÙI PHP / MySQL ™ GUESTBOOK ™ CATALOG ™ FORUM ™ SHOPPING CART PHAÀN 2 Toáng Phöôùc Khaûi (toång hôïp& bieân dòch) Phöông phaùp truy xuaát CSDL MySQL 1- Töø Command Prompt 2- Baèng leänh PHP 3- Duøng phpMyadmin Ñeå hieåu ñöôïc chöông naøy moät caùch roõ raøng, tröôùc tieân baïn caàn phaûi coù moät soá kieán thöùc cô baûn veà Cô Sôû Döõ Lieäu quan heä. Neáu baïn ñaõ hoïc qua moät khoaù caên baûn veà MS Access trong chöông trình ñaøo taïo chöùng chæ B chaúng haïn thì haún nhieân baïn coù theå tieáp tuïc. Coøn neáu nhö baïn chöa bieát gì veà noù thì toâi seõ baøn ñeán noù trong phaàn Phuï Luïc cuûa giaùo trình naøy hoaëc baïn coù theå tìm ngay moät taøi lieäu tham khaûo veà CSDL, deã nhaát laø taøi lieäu vaø MS Access ... ... Toâi chaéc raèng baây giôø baïn ñaõ coù kieán thöùc veà CSDL vaø hieåu bieát Table laø gì roài! Coù haøng khoái coâng vieäc baïn seõ phaûi laøm vieäc ñoái vôùi caùc Table vaø baïn seõ ñöôïc höôùng daãn caën keõ trong quyeån saùch naøy. Baïn seõ phaûi vöôït qua moät soá kieán thöùc veà noù ñeå môùi coù theå thaønh thaïo trong thao taùc vôùi Table. Nhö baïn bieát ñaáy: Con ñöôøng ñi ñeán thaønh coâng khoâng coù traûi thaûm saün ñaâu! Neáu baïn ñaõ töøng laøm vieäc vôùi MS SQL Server hay Access chuùng ñeàu coù hoã trôï vieäc taïo CSDL raát laø deã daøng vôùi giao dieän tröïc quan. Ñoái vôùi MySQL baïn cuõng coù theå söû duïng coâng cuï tröïc quan ñoù laø phpMyadmin. Tuy nhieân, baïn phaûi hoïc caùch thao taùc vôùi CSDL baèng doøng leänh, toâi chaéc raèng ñieàu naøy seõ raát coù ích cho baïn. Muoán chöông trình cuûa baïn trong luùc chaïy thao taùc töï ñoäng vôùi CSDL thì baïn caàn haøng taù leänh PHP/SQL ñeå thöïc hieän caùc yeâu caàu cuûa chöông trình. Tröôùc khi chuùng ta taïo caùc table trong CSDL cuûa MySQL, coù moät vaøi thöù baïn caàn phaûi hieåu roõ. Nhöõng khaùi nieäm cô baûn maø toâi saép giôùi thieäu sau ñaây raát quan troïng. Baïn haõy chaéc raèng mình ñaõ naém kyõ veà chuùng tröôùc khi thöïc hieän vieäc thieát keá döõ lieäu. Null Vieäc ñaàu tieân baïn phaûi laøm trong vieäc thieát keá moät table laø quyeát ñònh xem moät field coù cho pheùp giaù trò NULL hay khoâng. Trong CSDL quan heä, giaù trò NULL cuûa moät field ñoàng nghóa vôùi noù coù theå chaáp nhaän khoâng coù döõ lieäu trong ñoù. Neân nhôù raèng giaù trò NULL khaùc vôùi giaù trò cuûa moät chuoãi khoâng coù kyù töï trong ñoù hoaëc soá coù giaù trò 0. Ñoâi khi trong chöông trình, baïn seõ thöïc hieän moät soá ñoäng taùc so saùnh xem moät chuoãi naøo ñoù coù chöùa giaù trò hay khoâng, noù coù theå laø moät caâu leänh IF. Xeùt moät ví duï PHP nhö sau: $var //this is a variable used in the test if ($var == “”) { echo “Var is an empty string”; } else { echo $var; } Neáu baïn thöïc hieän vieäc so saùnh xem giaù trò soá coù phaûi 0 hay khoâng thì cuõng thöïc hieän töông töï. Ñoäng taùc so saùnh treân seõ khoâng laøm vieäc ñöôïc ñoái vôùi giaù trò NULL. Baïn neân hieåu raèng NULL laø khoâng chöùa baát kyø giaù trò gì trong ñoù, cho neân vieäc so saùnh trò khoâng mang yù nghóa gì caû. Trong chöông 3 baïn seõ thaáy raèng ñoái vôùi giaù trò NULL ñoøi hoûi laäp trình vieân phaûi raát caân nhaéc khi vieát leänh lieân keát table. Trong leänh SELECT cuûa SQL, coù moät soá caùch ñeå baïn coù theå kieåm tra neáu nhö moät field chöùa giaù trò NULL. Tröôùc heát baïn haõy söû duïng haøm Isnull(). Giaû söû tìm moät record trong table maø giaù trò midle_name laø NULL, baïn coù theå söû duïng query sau: select * from names where isnull(middle_name); Hoaëc laáy caùc record maø middle_name khaùc NULL: select * from names where !isnull(middle_name); Baïn cuõng coù theå söû duïng is null vaø is not null: select * from users were addr2 is null; select * from users where addr2 is not null; Ñeå roõ hôn, baïn haõy xem chuyeän gì xaûy ra khi toâi coá gaéng lieân keát hai table sau: Khach_hang ten Trung Khai ho_lot Le Anh Tong Phuoc ba_xa 1321 Null Hon_nhan ba_xa 1321 ten Diem ho_lot Nguyen Thuy Neáu baïn muoán tìm teân caùc khaùch haøng vaø teân nhöõng baø xaõ cuûa hoï, baïn seõ phaûi lieân keát 2 table naøy thoâng qua field ba_xa. (Xin baïn chôù lo laéng khi chöa hieåu veà cuù phaùp, baïn seõ hoïc ngay ôû phaàn tieáp theo thoâi). SELECT * FROM khach_hang, hon_nhan WHERE khach_hang.ba_xa = hon_nhan.ba_xa Vieäc thöïc hieän naøy chæ ñuùng ñoái vôùi Trung, nhöng seõ coù vaán ñeà ñoái vôùi Khai bôûi vì anh ta haõy coøn ñoäc thaân vaø ba_xa cuûa anh ta laø NULL. Trong chöông 3 baïn seõ khaûo saùt kyõ hôn veà vaán ñeà naøy. Index Ngöôøi ta noùi raèng öu ñieåm vöôït troäi cuûa Heä quaûn trò CSDL quan heä laø noù thöïc hieän caùc vieäc tìm kieám hay saép xeáp nhöõng khoái löôïng döõ lieäu khoång loà moät caùch raát nhanh choùng. Sôû dó noù thöïc hieän ñöôïc vieäc naøy laø do noù coù chöùa moät cô caáu löu tröõ döõ lieäu goïi laø INDEX. INDEX cho pheùp database server taïo ñöôïc moät field ñaëc tröng tìm kieám vôùi toác ñoä khoù ngôø. Caùc INDEX ñaëc bieät hoã trôï moät hoaëc moät nhoùm caùc record trong moät table chöùa soá löôïng lôùn caùc record. Chuùng cuõng hoã trôï toác ñoä cho caùc haøm lieân keát hoaëc taùch nhoùm döõ lieäu nhö min(), max(), baïn seõ tìm hieåu ôû Chöông 3. Vôùi caùc tính naêng vöôït troäi naøy, taïi sao ngöôøi ta laïi khoâng taïo index trong taát caû caùc field cuûa moät table? Coù moät soá ñieàu trôû ngaïi nhö sau: Thöù nhaát, index coù seõ laøm chaäm moät soá tieán trình trong CSDL. Moãi laàn baûo trì caùc index Database Server phaûi maát khaù nhieàu thôøi gian. Coù moät vaøi tröôøng hôïp chính caùc index laøm cho chuùng chaäm haún. Neáu nhö treân table cuûa baïn taát caû caùc record ñeàu gioáng y nhö nhau thì khoâng coù lyù do gì ñeå baïn taïo index. Caùc index dö thöøa chæ laøm cho toán theâm khoâng gian ñóa cuûa baïn maø thoâi. Ñoái vôùi moät table coù gaén khoaù chính (primary key) thì thoâng thöôøng field coù khoaù naøy ñöôïc duøng vaøo vieäc tìm kieám cho neân index seõ ñöôïc gaùn töï ñoäng treân field naøy. Baïn seõ gaëp laïi raát nhieàu coâng vieäc taïo index ôû caùc phaàn tieáp theo sau. Leänh CREATE Database Tröôùc khi taïo ñöôïc moät Table thì ñieàu taát yeáu laø baïn phaûi taïo ñöôïc moät Database caùi ñaõ. Vieäc naøy deã daøng vaø nhanh choùng thoâi. Leänh CREATE ñöôïc söû duïng nhö sau: mysql> create database database_name; Neáu nhö baïn thaéc maéc raèng sau khi taïo database noù seõ naèm ôû trong thö muïc naøo treân oå ñóa cuûa baïn thì baïn haõy tìm trong ..\mysql\data xem coù khoâng. Khi ñaët teân cho database, hay ñaët teân cho field vaø index gì ñaáy traùnh tröôøng traùnh tröôøng hôïp ñaët nhöõng caùi teân khoù nhôù hoaëc deã bò laãn loän. Ñoái vôùi moät soá heä thoáng Unix chaúng haïn coù söï phaân bieät chöõ HOA/thöôøng thì CSDL chaïy treân noù cuõng aûnh höôûng theo. Baïn haõy choïn moät quy öôùc cho rieâng mình trong vieäc ñaët teân ñeå khoûi nhaàm laãn veà sau. Chaúng haïn teân cuûa table vaø field ñeàu ñaët chöõ thöôøng chaúng haïn. Neân nhôù laø khoâng ñöôïc söû duïng khoaûng traéng. Baây giôø baïn tìm hieåu caû hai caùch taïo database: Caùch thöù nhaát taïo thuû coâng töø daáu nhaéc doøng leänh DOS, caùch thöù hai söû duïng caùc leänh trong PHP. Caùch thöù nhaát toâi ñaõ coù trình baøy ôû chöông giôùi thieäu vaø baïn ñaõ taïo moät database teân laø guestbook. Cuù phaùp taïo nhö sau: mysql> create database guestbook; Caùch thöù hai laø söû duïng leänh trong PHP, baïn coù theå duøng haøm mysql_create_db() hoaëc mysql_query(). Nhöng neân nhôù tröôùc khi taïo baïn phaûi thöïc hieän ñöôïc keát noái vôùi database server. $conn = mysql_connect(“localhost”,”username”, “password”) or die (“Could not connect to localhost”); mysql_create_db(“my_database”) or die (“Could not create database”); $string = “create database my_other_db”; mysql_query($string) or die(mysql_error()); Leänh USE Database Sau khi ñaõ taïo ñöôïc moät database môùi trong database server baïn seõ baét ñaàu choïn noù ñeå söû duïng cho coâng vieäc cuûa mình. Caùch thöïc hieän nhö sau: 1. Command Prompt: mysql> use database_name; 2. Trong PHP: $conn = mysql_connect(“localhost”,”username”, “password”) or die (“Could not connect to localhost”); mysql_select_db(“test”, $conn) or die (“Could not select database”); Leänh CREATE Table Löu yù: Leänh naøy thöïc hieän sau khi ñaõ coù leänh CREATE Database. Moät khi baïn ñaõ taïo vaø choïn database, vieäc tieáp theo laø taïo moät table. Baïn seõ söû duïng leänh Create Table nhö sau: create table table_name ( column_1 column_type column_attributes, column_2 column_type column_attributes, primary key (column_name), index index_name(column_name) ) Ñoái vôùi thuoäc tính caùc field (coät) chuùng ta caàn baøn veà: - null hoaëc not null - default Neáu baïn khoâng ñònh nghóa NULL hay NOT NULL thì NULL seõ ñöôïc choïn laøm giaù trò maëc ñònh. Haõy xeùt ví duï sau: create table topics2 ( topic_id integer not null auto_increment, parent_id integer default 0 not null, root_id integer default 0, name varchar(255), description text null, create_dt timestamp, modify_dt timestamp, author varchar(255) null, author_host varchar(255) null, primary key(topic_id), index my_index(parent_id)) Trong ví duï treân baïn taïo ra moät table coù teân topics2, coù taát caû 8 field vaø coù 2 index, moät index cho khoaù chính vaø moät cho parent_id. Type cuûa caùc field treân laàn löôït laø integer, varchar, text, timestamp. Giaù trò ñöùng sau defaul laø giaù trò maëc ñònh baïn gaùn cho moät oâ trong record khi khoâng nhaäp lieäu vaøo. Baây giôø chuùng ta aùp duïng caùc leänh naøy vaøo moät chöông trình PHP ñeå taïo table, haøm mysql_query () ñöôïc söû duïng: $conn = mysql_connect(“localhost”,”username”, “password”) or die (“Could not connect to localhost”); mysql_select_db(“test”, $conn) or die(“could not select database”); $query = “create table my_table (col_1 int not null primary key, col_2 text)”; mysql_query($query) or die(mysql_error()); * Löu yù: username vaø password tuyø thuoäc vaøo MySQL cuûa baïn.Ví duï: $conn = mysql_connect(“localhost”,”minhtrung”, “zadfdfaked”) or Thoâng thöôøng caùc nhaø cung caáp host PHP söû duïng localhost, tuy nhieân moät soá hosting khoâng söû duïng localhost nhö Yahoo chaúng haïn. Do ñoù baïn caàn xem höôùng daãn cuûa nhaø cung caáp host. Kieåu döõ lieäu Baây giôø chuùng ta haõy baøn veà caùc kieåu döõ lieäu (type) gaùn cho field trong table. Coù raát nhieàu kieåu khaùc nhau chuùng ta seõ laàn löôït khaûo saùt töøng kieåu moät. Kieåu chuoãi vaên baûn MySQL coù 7 kieåu daønh cho döõ lieäu kieåu chuoãi vaên baûn: ‰ char ‰ varchar ‰ tinytext ‰ text ‰ mediumtext ‰ longtext ‰ enum CHAR Caùch söû duïng: char(length) Length coù giaù trò toái ña laø 255. Giaû söû baïn söû duïng khai baùo char(10) thì baïn chæ ñöôïc pheùp nhaäp vaøo toái ña 10 kyù töï maø thoâi. VARCHAR Caùch söû duïng: varchar(length) Kieåu naøy cuõng gaàn gioáng nhö kieåu CHAR coù ñoä daøi toái ña cuõng laø 255. Ñieåm khaùc bieät cuûa varchar laø noù chæ laø bieán löu tröõ ñoä daøi, cho neân noù seõ khoâng thay ñoåi khi giaù trò cuûa cuûa oâ döõ lieäu daøi hay ngaén. MySQL seõ sinh ra moät kyù duøng laøm bieán chöùa ñoä daøi cuûa field kieåu varchar. Ñoàng thôøi MySQL seõ thöïc hieän chöùc naêng loaïi boû caùc khoaûng troáng trong moãi oâ döõ lieäu neáu nhö khoâng ñöôïc söû duïng heát. USING CHAR OR VARCHAR Coù söï khaùc nhau trong vieäc söû duïng CHAR vaø VARCHAR. Sau ñaây laø phöông höôùng löïa choïn cuûa baïn. Giaû duï baïn taïo moät field laø ÑÒA CHÆ vaø baïn döï tính ñoä daøi toái ña laø 150. Coù nhöõng tröôøng hôïp ñòa chæ raát ngaén ví duï: 1 Leâ Lôïi, Q.1, TPHCM. Baïn chæ söû duïng coù 20 kyù töï, nhö vaäy coøn troáng raát nhieàu kyù töï khoâng duøng ñeán. Trong tröôøng hôïp naøy baïn neân söû duïng kieåu VARCHAR (150). Tröôøng hôïp field cuûa baïn laø MAÕ SOÁ chaúng haïn, vaø baïn cho ñoä daøi toái ña laø 6 theo quy öôùc taïo maõ cuûa baïn ví duï: KH0001 . Trong tröôøng hôïp naøy caùc oâ khaùc ñeàu ñöôïc nhaäp theo chuaån ñònh saün luoân luoân laø 6 kyù töï cho neân khoâng vieäc gì baïn phaûi söû duïng VARCHAR ñeå MySQL phaûi nhoïc coâng theo doõi ñoä daøi cuûa caùc oâ moãi khi nhaäp vaøo. Baïn chæ söû duïng VAR(6) laø ñöôïc. Trong tröôøng hôïp baïn choïn kieåu döõ lieäu laø varchar(4) thì MySQL seõ töï ñoäng ñoåi laïi laø kieåu char. TINYTEXT Caùch söû duïng: tinytext Ñaây laø moät trong boán kieåu text nhò phaân. Taát caû 4 kieåu naøy (tinytext, text, mediumtext, largetext) ñeàu laø kieåu bieán töông töï nhö varchar. Chuùng khæ khaùc nhau veà ñoä daøi cuûa cho pheùp cuûa kyù töï maø thoâi. Tuy nhieân, ñoái vôùi TINYTEXT thì cho pheùp ñoä daøi toái ña laø 255, gioáng nhö varchar(255). Cho pheùp taïo index treân toaøn boä caùc kyù töï cuûa field naøy. TEXT Caùch söû duïng: text Cho pheùp ñoä daøi toái ña laø 65,535 kyù töï. Coù theå taïo index treân 255 kyù töï ñaàu. MEDIUMTEXT Caùch söû duïng: midiumtext Cho pheùp ñoä daøi toái ña laø 16,777,215 kyù töï. Coù theå taïo index treân 255 kyù töï ñaàu. LONGTEXT Caùch söû duïng: longtext Cho pheùp ñoä daøi toái ña laø 4,294,967,295 kyù töï. Coù theå taïo index treân 255 kyù töï ñaàu. Tuy nhieân loaïi naøy khoâng thoâng duïng bôûi vì MySQL chæ hoã trôï chuoãi 16 trieäu bytes. ENUM Caùch söû duïng: enum (‘value1’, ‘value2’, ‘value3’ ...) [default ‘value’] Vôùi enum baïn coù theå giôùi haïn caùc giaù trò ñöôïc ñònh saün cho moät field. Cho pheùp baïn ñònh tröôùc toái ña 65.535 giaù trò. Thoâng thöôøng ngöôøi ta duøng kieåu naøy cho field chöùa giaù trò Yes hoaëc No. Ví duï: create table my_table ( id int auto_increment primary key, answer enum (‘yes’, ‘no’) default ‘no’ ); SET Caùch söû duïng: set (‘value1’, ‘value2’, ‘value3’ ...) [default ‘value’] Kieåu naøy ñònh nghóa moät taäp hôïp haøng loaït caùc giaù trò ñònh tröôùc. Tuy nhieân, caùch naøy ít ñöôïc duøng bôûi vì noù phaù vôõ caáu truùc thieát keá CSDL (moät field coù quaù nhieàu kieåu) vaø caùc baïn seõ khoâng thaáy toâi söû duïng trong quyeån saùch naøy. Kieåu döõ lieäu soá MySQL coù taát caû 7 kieåu soá. Löu yù raèng caùc kieåu sau ñaây laø gioáng nhau: int/ integer, double/double precision/real, decimal/numeric ‰ int/integer ‰ tinyint ‰ mediumint ‰ bigint float ‰ double/double precision/real ‰ decimal/numeric Ñoái vôùi taát caû kieåu soá, giaù trò lôùn nhaát cho pheùp laø 255. Ñoái vôùi moät soá kieåu cho pheùp baïn theå hieän caùc soá 0 ñöùng ñaàu. Giaû söû baïn coù moät field coù ñoä daøi laø 10 thì soá 25 trong oâ döõ lieäu seõ ñöôïc theå hieän 0000000025. Field soá coøn ñöôïc ñònh nghóa laø coù daáu (signed) hoaëc khoâng daáu (unsigned). Maëc ñòch laø coù. ‰ INT/INTEGER Caùch söû duïng: int(display size) [unsigned] [zerofill] Neáu baïn duøng khoâng daáu thì giaù trò cuûa field cho pheùp laø töø 0 ñeán 4.294.967.295. Neáu duøng coù daáu thì giaù trò töø –2.147.483.648 ñeán 2.147.483.647. Kieåu Int seõ söû duïng auto_increment (töï ñoäng theo chieàu taêng) ñeå ñònh nghóa khoaù chính cuûa table. create table my_table ( table_id int unsigned auto_increment primary key, next_column text ); Ñeå yù raèng baïn söû duïng khoâng daáu (unsigned) bôûi vì auto_increment khoâng duøng cho caùc giaù trò aâm. TINYINT Caùch söû duïng: tinyint(display size) [unsigned] [zerofill] Neáu khoâng daáu, tinyint seõ chöùa caùc giaù trò nguyeân töø 0 ñeán 255. Neáu coù daáu thì töø -128 ñeán 127. MEDIUMINT Caùch söû duïng: mediumint(display size) [unsigned] [zerofill] Coù daáu: coù giaù trò töø -8.388.608 ñeán 8.388.607 Khoâng daáu: coù giaù trò töø 0 ñeán 1677215 BIGINT Caùch söû duïng: bigint(display size) [unsigned] [zerofill] Coù daáu: -9.223.372.036.854.775.808 ñeán 9.223.372.036.854.775.807 Khoâng daáu: from 0 to 18.446.744.073.709.551.615
- Xem thêm -

Tài liệu liên quan