• GVHD: Dương Khai Phong • Email: khaiphong@gmail.com • Website: http://khaiphong.tk http://course.uit.edu.vn

1/ Giới thiệu tổng quan Web

2/ Ngôn ngữ HTML và JavaScript

3/ Ngôn ngữ PHP căn bản

4/ Các đối tượng trong PHP

5/ PHP và hướng đối tượng

6/ PHP và cơ sở dữ liệu MySQL

7/ PHP và AJAX

8/ PHP và các hệ thống mã nguồn mở

9/ Triển khai ứng dụng PHP

PHẦN 5:

1. Giới thiệu

2. Các vấn đề cơ bản về DBMS MySQL

3. PHP và các thao tác cơ bản với DBMS MySQL

4. Các vấn đề lưu ý trong xử lý CSDL

 Most applications that you will work with or encounter will involve the use of some sort of data storage container. In some cases, you will need nothing more than files for this purpose, but that container is some sort of database engine. PHP often, provides access to a great number of different database systems, many of which are relational in nature and can be interrogated using Structured Query Language (SQL).

 In order to utilize these databases, it is important to have a firm grasp on SQL, as well as the means to connect to and interact with databases from PHP.

 This chapter reviews the basic concepts of SQL and database connectivity from PHP using PHP Data Objects (PDO). interfaces. (ref: page 132 of ebook “phparchitects Zend PHP 5 Certification Study Guide”)

MODELs FOR STORING DATA

DATABASE

DBMSs?

 DBMS MySQL:  MySQL là một hệ quản trị cơ sở dữ

1. Giới thiệu

2. Data types

liệu nguồn mở Ref: http://dev.mysql.com/doc/

 Sử dụng MySQL:

3. Databases

4. Tables

5. Manipulations

6. Retrieving

 Data types:

1. Giới thiệu

2. Data types

Data types

Meaning

int or integer

Signed integer number, 32 bits in length

smallint

Signed integer number, 16 bits in length

3. Databases

real

Signed floating-point number, 32 bits in length

float

Signed floating-point number, 64 bits in length

4. Tables

char

Fixed-length character string

5. Manipulations

varchar

Variable-length character string

6. Retrieving

 Databases

1. Giới thiệu

2. Data types

CREATE DATABASE CREATE SCHEMA

 Tables

3. Databases

4. Tables

5. Manipulations

6. Retrieving

CREATE TABLE ( [], [... []] )

 Lưu ý

 Khóa chính  Khóa ngoại  Các thao tác chỉnh sửa cấu trúc bảng: thêm,

xóa, sửa, …

 Manipulations (ADD)

1. Giới thiệu

INSERT INTO VALUES ([, ..., ])

2. Data types

3. Databases

INSERT INTO ([, ..., ]) VALUES ([, ..., ])

 Manipulations (DELETE)

4. Tables

5. Manipulations

DELETE FROM ;

6. Retrieving

DELETE FROM WHERE ;

 Manipulations (UPDATE) UPDATE SET field = value;

UPDATE SET field1 = value1,…, fieldn = valuen WHERE ;

 Retrieving

1. Giới thiệu

2. Data types

SELECT < *, [field1value]>[, ..., ]

3. Databases

FROM

[

4. Tables

WHERE

5. Manipulations

GROUP BY < field1value>[, ..., ]

6. Retrieving

HAVING

ORDER BY [, ..., ]

]

 Họ tên:  Mã SV:  Lớp:  Khoá:  Email:

01

02 … 19

20

A

B

C

D

Câu 1: Câu truy vấn nào sau đây gây ra lỗi: A. B.

C.

SELECT column1, column2, column2 FROM tablename; SELECT * FROM tablename WHERE columnname LIKE %keyword%; SELECT * FROM tablename WHERE column1 LIKE 'keyword' AND column2 LIKE 'keyword'; SELECT DISTINCT column1 FROM tablename ORDER BY column1; D.

Câu 2: Chọn phát biểu sai: A. B. C. D.

Ký hiệu “=” là một phép gán giá trị trong mệnh đề where INT là một kiểu dữ liệu trong DBMS MySQL Có thể thêm thuộc tính cho một bảng khi bảng đó đã chứa dữ liệu Các từ khóa trong câu truy vấn của DBMS MySQL không phân biệt chữ hoa hay chữ thường.

NULL a1 a1 bob jim tom

Câu 3: Cho bảng emplyees và các bộ giá trị như sau: empid name managerid a1 b1 B2 Chọn phát biểu đúng từ câu truy vấn sau

select count(managerid) from employees

A. B. C. D.

Câu truy vấn trả về 3 Câu truy vấn trả về 2 Câu truy vấn trả về 1 Câu truy vấn thông báo lỗi do thuộc tính managed có chứa giá trị null.

Câu 4: Chọn lệnh cần điền cho từ key: CREATE TABLE tblPRODUCT_1 key

A. B. C. D. SELECT * FROM tblPRODUCT_1; (tblPRODUCT_1 varchar(20)); SELECT * FROM tblPRODUCT_2; Tất cả đều sai

productid

productname

price

tblPRODUCT

bo01

china book

1500

pe01

china pencil

3500

Câu 5: Chọn biết kết quả của câu truy vấn từ bảng tblPRODUCT sau:

select count(*)from tblPRODUCT where productid='bo01' and productid='pe01'; A. B. C. D. 1 2 Câu lệnh thực thi báo lỗi Câu lệnh thực thi nhưng không trả về kết quả

a. Giới thiệu:

 Các đối tượng liên quan:

 mysql_connect

 mysql_error

 mysql_select_db

 mysql_query

 mysql_fetch_row

 …

b. Các bước thao tác CSDL trong PHP:

 Bước 1: Kết nối với CSDL

 Bước 2: Xây dựng câu truy vấn dữ liệu

 Bước 3: Thực thi câu truy vấn

 Bước 4: Xử lí kết quả

 Bước 5: Ngắt kết nối với CSDL

 Bước 1 (Kết nối với CSDL)

1. Bước 1

2. Bước 2

Connection

Connected

3. Bước 3

Database

4. Bước 4 PHP Pages

5. Bước 5

 Kết nối MySQL và chọn CSDL resource mysql_connect (

string host, string LoginName, string password)

int mysql_select_db (

string dbName, resource connection)

 Bước 1 (Kết nối với CSDL)

 Ví dụ

1. Bước 1

2. Bước 2

3. Bước 3

4. Bước 4

5. Bước 5

//Không kết nối được, thoát ra và báo lỗi die("không nết nối được vào MySQL server");

} //end if //chọn CSDL để làm việc mysql_select_db($DBNAME, $conn); //đóng kết nối mysql_close($conn); ?>

 Bước 2 (Xây dựng câu truy vấn dữ liệu)

1. Bước 1

SQL

Ví dụ

2. Bước 2

3. Bước 3

INSERT

$strSQL = "INSERT INTO Users(UserName, Password) VALUES ('admin','123')"

4. Bước 4

DELETE

$strSQL = "DELETE FROM Users WHERE UserName = 'lvminh' "

5. Bước 5

UPDATE

$strSQL = "UPDATE Users SET Password = 'abc' WHERE UserName = 'admin' "

SELECT

$strSQL = "SELECT * FROM Users WHERE UserName = 'admin' "

 Bước 3 (Thực thi câu truy vấn)

1. Bước 1

2. Bước 2

SQL

Result

3. Bước 3

Database

4. Bước 4 PHP Pages

5. Bước 5

 Kết nối MySQL và chọn CSDL resource mysql_query(

string SQL_cmd, resource connection )

 Ví dụ:

$strSQL = "INSERT INTO Users (UserName, Password) VALUES

('admin','123')";

mysql_query($strSQL,$conn); $strSQL = "SELECT * FROM Users"; $result = mysql_query($strSQL,$conn);

?>

 Bước 4 (Xử lý kết quả)

1. Bước 1

2. Bước 2

Result

3. Bước 3

Database

4. Bước 4 PHP Pages

UserName

Password

5. Bước 5

cursor

 Hiển thị dữ liệu trả về  Sử dụng hàm

A AA

$row = mysql_fetch_assoc($result) $row = mysql_fetch_row($result)

B

BB

 Số lượng FIELD

C CC

$num = mysql_num_fields($result);

 Truy cập đến từng FIELD echo $row["Username"];

D DD

Hoặc

… …

X

XX

echo $row[0];

Y YY

Z

ZZ

 Bước 5 (Ngắt kết nối với CSDL)

1. Bước 1

2. Bước 2

Result

3. Bước 3

Database

 Tự động thực thi khi kết thúc mã lệnh nhờ cơ chế tự động thu rác

4. Bước 4 PHP Pages

(garbage collector)

5. Bước 5

bool mysql_close( resource connection);

c. Ví dụ xây dựng đối tượng xử lý các bước thao tác CSDL:

class cProccessDB{ private $server; private $sys_username; private $sys_password; private $DatabaseName; private $conn; public $notice=false; function __construct($server="localhost", $sys_username="root", $sys_password=""){

$this->server=$server; $this->sys_username=$sys_username; $this->sys_password=$sys_password; $this->DatabaseName=null;

} // next slide 02

c. Ví dụ xây dựng đối tượng xử lý các bước thao tác CSDL:

class cProccessDB{ // … continue private function init($notice=false){

$this->conn = mysql_connect($this->server,

$this->sys_username, $this->sys_password);

if (!$this->conn){

die("Không kết nối được vào MySQL Server: ".mysql_error($conn));

} mysql_query('SET NAMES "utf8"'); if ($notice)

echo "Kết nối thành công"."
";

}

// next slide 03

c. Ví dụ xây dựng đối tượng xử lý các bước thao tác CSDL:

class cProccessDB{ // … continue function setDatabase($DatabaseName){

$this->init($this->notice); $this->DatabaseName = $DatabaseName; mysql_select_db($this->DatabaseName,$this->conn) or die("Không chọn được database: ".mysql_error($this->conn));

}

// next slide 04

c. Ví dụ xây dựng đối tượng xử lý các bước thao tác CSDL:

class cProccessDB{ // … continue function select($sql){

$result = mysql_query($sql,$this->conn); while($row = mysql_fetch_row($result)){

echo "$row[0] $row[1]
";

}

} function insert($sql){

$result = mysql_query($sql,$this->conn); if (!$result)

echo "Lỗi insert: ".mysql_error($this->conn);

} function __destruct(){

mysql_close($this->conn);

}

}

?>

a. MySQL và font Unicode:  Tạo trong trình quản trị CSDL MySQL:

a. MySQL và font Unicode:  Tạo trong trình quản trị CSDL MySQL:

a. MySQL và font Unicode:  Dùng câu lệnh SQL để tạo:

 Thiết lập thuộc tính Database: khi tạo CSDL MySQL phải COLLATE

CHARACTER

SET

utf8

lập

thiết utf8_general_ci.

CREATE DATABASE sinhvien DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

 Hoặc thiết lập các thuộc tính của bảng

Ví dụ:

CREATE TABLE SinhVien (

MaSV VARCHAR(8) NOT NULL, HoTen VARCHAR(50), NgaySinh DATE, PRIMARY KEY(MaSV)

)COLLATE utf8_general_ci;

a. MySQL và font Unicode:  Dùng câu lệnh SQL để tạo:

 Hoặc thiết lập các thuộc tính của field

Ví dụ:

CREATE TABLE SinhVien (

MaSV VARCHAR(8) NOT NULL, HoTen VARCHAR(50) COLLATE utf8_general_ci NOT NULL, NgaySinh DATE, PRIMARY KEY(MaSV)

);

a. MySQL và font Unicode:  Thiết lập unicode trong tập tin *.php:  Khai báo thẻ meta, charset=utf-8.

Trang quản lý thông tin SV

 Đoạn code kết nối CSDL MySQL

Ví dụ:

// Thêm dòng này sau hàm mysql_connect($server, $user, $pass): mysql_query('SET NAMES "utf8"');

b. MySQL và mã hóa dữ liệu:  Encryption and Compression Functions

Name

Description

AES_DECRYPT()

Decrypt using AES

AES_ENCRYPT()

Encrypt using AES

COMPRESS()

Return result as a binary string

DECODE()

Decodes a string encrypted using ENCODE()

DES_DECRYPT()

Decrypt a string

DES_ENCRYPT()

Encrypt a string

ENCODE()

Encode a string

ENCRYPT()

Encrypt a string

MD5()

Calculate MD5 checksum

OLD_PASSWORD()

Return the value of the pre-4.1 implementation of PASSWORD

PASSWORD()

Calculate and return a password string

SHA1(), SHA()

Calculate an SHA-1 160-bit checksum

SHA2()

Calculate an SHA-2 checksum

UNCOMPRESS()

Uncompress a string compressed

UNCOMPRESSED_LENGTH()

Return the length of a string before compression

ĐH CÔNG NGHỆ THÔNG TIN

http://sites.google.com/site/khaiphong

36

 Họ tên:  Mã SV:  Lớp:  Khoá:  Email:

01

02 … 19

20

A

B

C

D

Câu 1: Chọn phát biểu đúng thay cho câu lệnh chứa từ key ở dòng 1 (giả sử: server chạy cục bộ ở localhost, user và password của MySQL: root và pass): A. B. C. D. $conn = mysql_connect('localhost','root','pass'); $conn = mysql_connect('root','pass','localhost'); $conn = mysql_connect('root','pass'); Tất cả đều đúng

Câu 2: Cho cấu trúc bảng tblProduct thuộc database 'db_php_mysql' như sau CREATE TABLE tblPRODUCT(

ProdID varchar(50) primary key, ProdName varchar(50)

);

Bảng tblProduct được chèn thêm 2 bộ dữ liệu ('p01','book') và ('p01','pen')

Chọn phát biểu đúng sau khi thực thi đoạn lệnh sau (giả sử: server chạy cục bộ ở localhost, user của MySQL là root và không đặt password): A. B. Đoạn lệnh thông báo lỗi "Database error" C. D. Bảng tblProduct được chèn thêm 1 bộ dữ liệu ('p01', 'book ') Tất cả đều sai

Câu 3: Cho cấu trúc bảng tblAccount thuộc database 'db_php_mysql' như sau CREATE TABLE tblACCOUNT(

UserName varchar(50) primary key, Password varchar(50)

);

Bảng tblAccount được chèn thêm 2 bộ dữ liệu ('abc','pass') và (‘abc',‘123') Bảng tblAccount được chèn thêm 1 bộ dữ liệu (‘abc',‘123')

Chọn phát biểu đúng sau khi thực thi đoạn lệnh sau (giả sử: server chạy cục bộ ở localhost, user của MySQL là root và không đặt password): A. B. C. Đoạn lệnh thông báo lỗi "Database error" D. Đoạn lệnh báo lỗi ở dòng 4 do trùng khóa ‘abc’

Câu 4: Cho cấu trúc và dữ liệu bảng tblAccount thuộc database 'db_php_mysql' như sau CREATE TABLE tblACCOUNT( UserName Password

abc 12 UserName varchar(50) primary key, Password varchar(50)

); def 34

Chọn câu truy vấn thay cho từ key để xuất ra kết quả là ‘46’ (giả sử: server chạy cục bộ ở localhost, user của MySQL là root và không đặt password): A. B. C. D. "select password from tblaccount"; "select password(“abc”)+password(“def”) from tblaccount"; "select count(password) from tblaccount"; "select sum(password) from tblaccount";

Câu 5: Cho cấu trúc và dữ liệu bảng tblAccount thuộc database 'db_php_mysql' như sau CREATE TABLE tblPRODUCT( ProdID ProcName Price

P01 Book 1500

ProdID varchar(50) primary key, ProdName varchar(50), Price float P02 Pen 500

); Chọn câu lệnh thay cho từ key để xuất ra kết quả là ‘1500’ (giả sử: server chạy cục bộ ở localhost, user của MySQL là root và không đặt password): A. B. C. D. echo $row[2]; echo $row["Price"]; Cả A và B đều đúng Cả A và B đều sai

Câu 6: Cho cấu trúc và dữ liệu bảng tblAccount thuộc database 'db_php_mysql' như sau CREATE TABLE tblACCOUNT( UserName Password

abc 12 UserName varchar(50) primary key, Password varchar(50)

); def 34

Cho biết kết quả của đoạn lệnh sau (giả sử: server chạy cục bộ ở localhost, user của MySQL là root và không đặt password): A. Đoạn lệnh xuất kết quả là 24 B. Đoạn lệnh thông báo lỗi Fatal error C. Đoạn lệnh xuất cảnh báo Warning D. Tất cả đều sai

Câu 7: Cho cấu trúc và dữ liệu bảng tblAccount thuộc database 'db_php_mysql' như sau CREATE TABLE tblPRODUCT( ProdID ProcName Price

P01 Book 1500

ProdID varchar(50) primary key, ProdName varchar(50), Price float P02 Pen 500

if($rs) {echo mysql_num_rows($rs);}

); Cho biết kết quả của đoạn lệnh sau (giả sử: server chạy cục bộ ở localhost, user của MySQL là root và không đặt password): A. Đoạn lệnh xuất kết quả là 1 B. Đoạn lệnh xuất kết quả là 2 C. Đoạn lệnh thông báo lỗi dòng 4 D. Tất cả đều sai

Câu 8: Cho cấu trúc và dữ liệu bảng tblAccount thuộc database 'db_php_mysql' như sau CREATE TABLE tblPRODUCT( ProdID ProcName Price

P01 Book 1500

ProdID varchar(50) primary key, ProdName varchar(50), Price float P02 Pen 500

k1 = "SELECT * FROM tblPRODUCT WHERE ProdID='p02'“ và k2 = “echo $row[0];” k1 = "SELECT * FROM tblPRODUCT WHERE ProdID='p02'“ và k2 = “echo $row[“Price”];” k1 = "SELECT * FROM tblPRODUCT“ và k2 = “echo $row[2];” k1 = "SELECT * FROM tblPRODUCT WHERE ProdID='p02'“ và k2 = “echo $row[2];”

); Chọn câu lệnh thay cho từ k1 và k2 để xuất ra kết quả là ‘500’ (giả sử: server chạy cục bộ ở localhost, user của MySQL là root và không đặt password): A. B. C. D.

Câu 9: Cho cấu trúc và dữ liệu bảng tblAccount thuộc database 'db_php_mysql' như sau CREATE TABLE tblACCOUNT( UserName Password

abc 12 UserName varchar(50) primary key, Password varchar(50)

); def 34

echo $i['Field']." ";

Cho biết kết quả của đoạn lệnh sau (giả sử: server chạy cục bộ ở localhost, user của MySQL là root và không đặt password): A. Đoạn lệnh thông báo lỗi B. Đoạn lệnh xuất kết quả null C. Đoạn lệnh xuất kết quả là abc def D. Đoạn lệnh xuất kết quả là UserName Password

Câu 10: Cho cấu trúc và dữ liệu bảng tblAccount thuộc database 'db_php_mysql' như sau CREATE TABLE tblACCOUNT( UserName Password

abc 12 UserName varchar(50) primary key, Password varchar(50)

); def 34

if (!$result) {

die('Could not query:‘)

Cho biết kết quả của đoạn lệnh sau (giả sử: server chạy cục bộ ở localhost, user của MySQL là root và không đặt password): A. Đoạn lệnh xuất kết quả là abc B. Đoạn lệnh xuất kết quả là 12 C. Đoạn lệnh xuất kết quả là def D. Đoạn lệnh xuất kết quả là 34