Tải bản đầy đủ (.pptx) (18 trang)

Bài giảng Mã nguồn mở: Chương 6

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (381.68 KB, 18 trang )

Chương 6 :

PHP & MYSQL
GIẢNG VIÊN : THS. NGUYỄN MINH THÀNH
EMAIL :

Môn Các Hệ Thống Mã Nguồn Mở

1


NỘI DUNG

1.
2.
3.
4.

KẾT NỐI DATABASE SERVER
TRUY CẬP CSDL VÀ THỰC THI CÂU LỆNH
XỬ LÝ TIẾNG VIỆT TRONG MYSQL & PHP
PHÂN TRANG DỮ LIỆU

Môn Các Hệ Thống Mã Nguồn Mở

2


KẾT NỐI DATABASE SERVER
1- Cú pháp
mysql_connect(server_name,username,password);


Đối với localhost, dù webserver có PORT là 81 vẫn khơng ghi thêm port,
port mặc định của database server MySQL là 3306.
Các phong cách sử dụng :
1- $con=mysql_connect(svn,usr,pss) or die(“Error :”.mysql_error());
2- $con=mysql_connect(svn,usr,pss);
if(!$con) {die(“Error :”.mysql_error(); //có thể thay đổi message}
else{ // truy cập database }
Ví dụ :
$con=mysql_connect(“localhost”,”root”,””) or die(“Error :”.mysql_error());
Các Hệ
Thống Mã
Nguồn
Mở hàm die() và các sử dụng if…else ở đây!
Lưu ý: Môn
Hãy
nhận
xét
về

3


THỰC THI CÂU LỆNH SQL
1- Truy cập CSDL
mysql_select_db(“database name", $con);
với $con được trả về trong mysql_connect() đã thành công trước đó.
2- Thực thi câu lệnh SQL
mysql_query(“SQL_Statement”);
Tùy theo câu lệnh SQL mà ta có kết quả trả về của hàm mysql_query()
mà ta có mã PHP xử lý tương ứng.

+ Câu lệnh Select : trả về mảng các record
+ Các câu lệnh khác
: true/false tùy theo sự thành công hay không
a)Câu lệnh SQL : Select…
$strSQL=“Select * from table_name”; //nếu câu lệnh SQL dài, phức tạp.
$result = mysql_quer($strSQL);
if($result) { trích xuất dữ liệu trong mảng $result;} // !?
else {echo “Records not found!”;}
Môn Các Hệ Thống Mã Nguồn Mở

4


THỰC THI CÂU LỆNH SQL (TT)
b) Câu lệnh SQL : Create Database
$result=mysql_query("CREATE DATABASE database_name",$con );
if($result) {echo “Database created!”;}
else {echo “Could’nt create database,” .mysql_error();}
Tuy nhiên, để đảm bảo các field kiểu char có thể dữ liệu theo mã UTF-8
thì cần thay đổi câu lệnh SQL:
$strSQL="CREATE DATABASE VD2”;
$strSQL+= “DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci";
$result=mysql_query($strSQL,$con );
if($result) {echo “Database created!”;}
else {echo “Could’nt create database,”.mysql_error();}
- Ta thường tạo CSDL thông qua một công cụ riêng, ít khi sử dụng
câu lệnh như trên. Tuy nhiên, tạo table lại hay sử dụng.
- Collate: đối chiếu, kiểm tra thứ tự (trang).

Môn Các Hệ Thống Mã Nguồn Mở


5


c- Câu lệnh SQL: Create table
$sql = "CREATE TABLE table_name (
field_name data_type[(length)] constraint,…
) ENGINE = MyISAM CHARACTER SET utf8 COLLATE utf8_unicode_ci";
Ví dụ :
$sql=“Create table SV (Ma varchar(11) NOT NULL ,”;
$sql+=HoTen varchar(30) not null , primary key(Ma)”;
$sql+=“) engine = MyISAM” ;
$result = mysql_query($sql,$con);
if(!$result) {echo “Error”.mysql_error();}
else { // mã PHP phù hợp}

Môn Các Hệ Thống Mã Nguồn Mở

6


d- Câu lệnh Insert, Update
$sql=“Insert into table_name(field_list) values(value_list);
$result=mysql_query($sql);
if(!$result) {echo mysql_error(); // xử lý tiếp;}
else { //xử lý …}
Việc sử dụng câu lệnh Upadte cũng tương tự
Lỗi xảy ra nếu vi phạm một trong các ràng buộc toàn vẹn dữ
liệu.
-Sử dụng hàm die() một cách hợp lý

-Sử dụng transaction để điều khiển mạch chương trình. Xem bài
đọc thêm PHP trên trang web của giảng viên
Môn Các Hệ Thống Mã Nguồn Mở

7


e- Câu lệnh SQL: Select…
$sql = “Select …..”;
$result = mysql_query($sql);
if(!$result) { echo “Record not found!”; }
else {
while($row = mysql_fetch_array($result)){
  
echo $row[‘firstField'] . " " . $row[‘secondField'];
 
 echo "
";
}
} // else
mysql_close($con); // đóng kết nối
Câu lệnh Select … from … where … limit start, total trong MySQL
Trong đó start: là bắt đầu từ record số start (>=0), Record đầu tiên thứ tự là 0
Total : là tổng số record được hiển thị. Đây là đặc điểm riêng của MySQL
fetch : nạp vào, tìm và nạp vào, $row là một mảng với key là fieldname
Chúng ta còn phương pháp khác duyệt “tập các record”, xem trang sau.
Môn Các Hệ Thống Mã Nguồn Mở

8



Hàm mysql_fetch_array
Cú pháp: mysql_fetch_array(data [, array_type]);
Array_type có thể là:
MySQL_Assoc : mảng kết hợp, key của mảng là field_name
MySQL_Num : key của mảng là chỉ số
MySQL_Both : cả hai khả năng trên, đây là kiểu mặc định.
Vì khơng khai báo array_type, tức là MySQL_Both, do vậy (1) có
thể:
while($row = mysql_fetch_array($result)){
  
echo $row[0] . " " . $row[1];
 
 echo "
";
}
Môn Các Hệ Thống Mã Nguồn Mở

9


TIẾNG VIỆT TRONG PHP

- Phần không sử dụng CSDL MySQL, phải đảm bảo:
Lưu tệp với mã UTF-8 (*)
Khai báo trong phần head
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- Phần sử dụng CSDL MySQL, phải đảm bảo:
Khai báo câu lệnh mysql_query(“SET NAMES ‘utf8’”) trước câu lệnh
mysql_query($sql) với $sql là một câu lệnh Select. Ví dụ:

$sql = “Select …..”;
mysql_query(“SET NAMES ‘utf8’”); (*)
$result = mysql_query($sql);
if(!$result) { echo “Record not found!”; }
else {
while($row = mysql_fetch_array($result)){
  
echo $row[‘firstField'] . " " .$row[‘secondField'].”
”;}
Môn Các Hệ Thống Mã Nguồn Mở
10
}


MỘT SỐ HÀM HỮU ÍCH

- Kiểm tra kết quả trả về của mysql_connect và mysql_query:
$con=mysql_connect(server, user, password)
$rs =mysql_query($sql, $con)
Cách 1: dùng if($con) hay if($rs) trả về giá trị logic
Cách 2: dùng if(is_resource($con)) hay if(is_resource($rs)) trả về
giá trị logic
- Bản chất $rs trả về là một nguồn dữ liệu, là recordset như trong
ADO của Microsoft
- Trong câu lệnh:
while($row = mysql_fetch_array($rs)){
  
echo $row[‘FieldName'] .
Để kiểm tra $row dùng hàm is_array()
- Để ngăn thông báo lỗi khi sử dụng mysql_connect, mysql_query
cần sử dụng toán tử error: @

Môn Các Hệ Thống Mã Nguồn Mở

11


PHÂN TRANG DỮ LIỆU

 Kỹ thuật cơ bản dựa trên câu lệnh Select … limit start, total
Mỗi trang sẽ hiển thị total records, bắt đầu từ reocord thứ start
Record đầu tiên có thứ tự là 0.
 Có nhiều phương pháp xây dựng các link để điều khiển trang
Pre 1 2 3 4 5 Next
Giả sử test.php là trang PHP có chức năng hiển thị trang thứ $I với số
record là $PageSize, tùy theo $i mà xác định $start để xây dựng câu
lệnh Select cho từng lựa chọn
Phương pháp ưa thích được lựa chọn là sử dụng :
$start : vị trí record bắt đầu của trang hiện tại
$prev : vị trí bắt đầu cho trang liền trước trang hiện tại (link PREV)
$next
: vị trí bắt đầu cho trang liền sau trang hiện tại (link NEXT) 12
Môn Các Hệ Thống Mã Nguồn Mở


PHÂN TRANG DỮ LIỆU (TT)

Trong ứng dụng này, ta có 4 module:

 Connect.inc có chức năng kết nối đến CSDL, sử dụng các hàm:
mysql_connect() và msql_select_db()
Trong lập trình CSDL, module này cần thiết kế tốt và lưu dưới một file

.inc riêng, trang nào cần thì include vào
 Init.inc có chức năng khởi tạo các biến chung để điều khiển link
 Test.php là trang chính, có chức năng hiển thị nội dung trang với các
record bắt đầu từ $start đến ($start+$pagesize-1), bao gồm
Connect.inc, Init.inc và Link.inc
 Link.inc có chức năng tạo ra các liên kết dạng Prev 1 2 3 4 Next
Trong nhiều chương trình, LTV xây dựng hẵn một Class để truy cập
CSDL. Sinh viên xem trong phần Bài đọc thêm PHP trên website của
giảng viên về nội dung này.
Môn Các Hệ Thống Mã Nguồn Mở

13


PHÂN TRANG DỮ LIỆU (TT)

Tệp Connect.inc

$servername='localhost';
$dbusername='root';
$dbpassword='root';
$dbname='paging';

// Server Name hay địa chỉ IP dều được
// Login user name
// User’s password
// Tên CSDL MySQL cần thiết

connecttodb($servername,$dbname,$dbusername,$dbpassword);

function connectdb($svn,$dbn,$dbu,$db){
global $con; //$con sẽ dùng trong một số câu lệnh msql_
$con=mysql_connect ("$svn","$dbu","$dbp");
if(!$con){die(“Không thể kết nối đến MySQL Server");}
mysql_select_db("$dbn",$con) or die (“Không thể mở CSDL, lý do:
".mysql_error());
}
14
?> Môn Các Hệ Thống Mã Nguồn Mở


TệpPHÂN
Init.inc TRANG

DỮ LIỆU (TT)

$pagesize=15; // Mỗi trang hiển thị 15 record, trừ trang cuối có thế ít hơn
$start=$_GET['start'];
$start=($start-0); // chuyển $start thành số tự nhiên
//Ban dau khong GET nen $start="" =>($start-0)=0;
$back = $start - $pagesize;
$next = $start + $pagesize;
$query="select * from Student";
$result=mysql_query($query);
$totalRecords=mysql_num_rows($result); // Total records of recordset
echo "Total records $totalRecords
";
Môn Các Hệ Thống Mã Nguồn Mở
15
?>



PHÂN TRANG DỮ LIỆU (TT)

Tệp Test.php
include("config.php");
include("init.inc");

mysql_query("SET NAMES 'utf8'");
$query="select * from Student limit $start,$pagesize";
$result=mysql_query($query);
$i=1;
while($row = mysql_fetch_array($result)){
echo $i."  ".$row[1]."
"; $i++;}
include("link.inc");
mysql_close($link);
?>

Môn Các Hệ Thống Mã Nguồn Mở

16


PHÂN
TRANG DỮ LIỆU (TT)
Tệp
Link.inc
echo "<hr>";

if($totalRecords > $pagesize ){
if($back >=0)
{echo "<a href='test.php?start=$back'>Prev</a>"; }
$i=0; // theo dõi số thứ tự các record
$j=1; // theo số thứ tự của trang để tạo liên kết
for($i=0;$i < $totalRecords;$i+=$pagesize){
if($i <> $start){echo " <a href='test.php?start=$i'>$j</a> ";
} else { echo $j;}
$j=$j+1;
}
if($next < $totalRecords)
{echo "<a href='test.php?start=$next'>Next</a>";}
} Môn Các Hệ Thống Mã Nguồn Mở
?>

17


HỎI ĐÁP ?

Môn Các Hệ Thống Mã Nguồn Mở

18



×