1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Bài giảng phát triển ứng dụng web chương 7 lê đình thanh

41 1 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Bài giảng phát triển ứng dụng web chương 7
Tác giả Lê Đình Thanh
Trường học Trường Đại học Công nghệ, ĐHQGHN
Chuyên ngành Công nghệ Thông tin
Thể loại bài giảng
Thành phố Hà Nội
Định dạng
Số trang 41
Dung lượng 0,97 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Xây dựng các truy vấn, cập nhật và thực hiện truy vấn, cập o MySQL, PostgreSQL, Oracle, MS SQL, MongoDB … • Thư viện thao tác CSDL o PDO o ORM... Tầng CSDL • CSDL cho ứng dụng • Hệ q

Trang 1

Lê Đình Thanh

Khoa Công nghệ Thông tin Trường Đại học Công nghệ, ĐHQGHN E-mail: thanhld@vnu.edu.vn Mobile: 0987.257.504

Bài giảng

PHÁT TRIỂN ỨNG DỤNG WEB

Trang 2

Thao tác CSDL

Chương 7

Trang 4

Tổng quan

• Các bước chính

1 Kết nối đến máy chủ CSDL và lựa chọn CSDL để làm việc

2 Xây dựng các truy vấn, cập nhật và thực hiện truy vấn, cập

o MySQL, PostgreSQL, Oracle, MS SQL, MongoDB …

• Thư viện thao tác CSDL

o PDO

o ORM

Trang 6

Tầng CSDL

• CSDL cho ứng dụng

• Hệ quản trị CSDL quản lý CSDL của ứng dụng

 Nhận truy vấn từ các chương trình dịch tầng giữa, thao tác CSDL và trả kết quả cho chương trình

yêu cầu

Trang 8

P HP D ata O bjects

quán để thao tác với CSDL sử dụng PHP

Trang 9

Cần cài driver cho hệ QTCSDL được sử dụng

Trang 11

Kết nối và đóng kết nối CSDL

• $db = new PDO($dsn, $username, $password, [$options]);

• Tên nguồn dữ liệu (dsn - database source name) khác nhau với các hệ QTCSDL

 MySQL: “mysql:host= ; dbname= ;”

 PostgressSQL: “pgsql:host= ; dbname= ;”

 MS SQL: “sqlsrv:Server= ;Database= ”

 …

• Đóng kết nối

 $db = null;

Trang 13

$db = new PDO($dsn, ”canbo”,”canbo@123”);

//Các thao tác cơ sở dữ liệu: truy vấn, cập nhật //

//Đóng kết nối cơ sở dữ liệu

$db = null;

} catch (PDOException $e) {

echo "Lỗi”.$e->getMessage();

}

Trang 15

echo “$r bản ghi đã được cập nhật.”;

} catch (PDOException $e) {

echo "Lỗi”.$e->getMessage();

}

Trang 16

Cập nhật CSDL (tiếp)

bị trước

WHERE id= :id and name LIKE ? ");

 $stmt->bindValue(' :id ', 123);

 $stmt->bindValue( 2 , "Johnny");

Trang 19

while ($row = $stmt->fetch(PDO::FETCH_ASSOC))) {

echo $row[‘tieude’].” “.$row[‘nxb’].”\n”;

}

} catch (PDOException $e) {

echo "Lỗi”.$e->getMessage();

}

Trang 20

Truy vấn CSDL (tiếp)

• Thực hiện truy vấn với lệnh chuẩn bị trước

 $stmt = $db->prepare("SELECT * FROM table WHERE id= ? AND name= ? ");

 $stmt->bindValue( 1 , 123);

 $stmt->bindValue( 2 , “Jonny”);

 $stmt->execute();

 Duyệt các bản ghi

 while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {

 echo $row['field1'].' '.$row['field2'];

 }

 Đếm số bản ghi

 $row_count = $stmt->rowCount();

Trang 21

Truy vấn CSDL (tiếp)

try {

//Chuẩn bị câu lệnh truy vấn

$stmt= $db->prepare(“select * from Sach where nxb = ?”);

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {

echo $row[‘tieude’].” “.$row[‘nxb’].”\n”;

}

} catch (PDOException $e) {

echo "Lỗi”.$e->getMessage();

}

Trang 23

Truy vấn theo dữ liệu người dùng

• Các phương pháp nhập liệu

• Nhập tham số và giá trị ngay sau URL hoặc

• Bấm vào liên kết đến URL có các tham số kèm theo

• Đệ trình form theo phương thức GET

 Dữ liệu được đưa vào URL trong chuỗi truy vấn

 Ví dụ

http://localhost/example.php?regionName=Riverl and&countryName=Jamaica

• Đệ trình form theo phương thức POST

 Dữ liệu được đưa vào thân của gói HTTP Request

Trang 24

Truy vấn theo dữ liệu người dùng

• Nhận dữ liệu được gửi theo phương thức GET

$bien = $_GET[' tenThamso '];

$bien = $_POST[' tenThamso '];

Trang 25

Xử lý an ninh dữ liệu nhập

• Dữ liệu do người dùng nhập có thể không

đúng định dạng và chứa các ký tự đặc biệt làm cho chương trình không làm việc hoặc làm

việc không đúng

 Cần xử lý hợp thức dữ liệu trước khi sử dụng

• …

Trang 26

Xử lý an ninh cho dữ liệu nhập

• Giới hạn độ dài của giá trị

• Thay các ký tự đặc biệt như ; > < \ “ ‘ … bằng cách thêm \ trước ký tự

• Ví dụ

 Dữ liệu được nhập: 2001;cat /etc/passwd

 Cắt bớt và thay thế dấu đặc biệt: 2001\;cat

• PHP

function clean($input, $maxlength=0) {

if ($maxlength > 0) $input = substr($input, 0, $maxlength);

if (function_exists('mysql_real_escape_string')) {

if (get_magic_quotes_gpc()) { // Undo magic quote effects

Trang 27

Tạo truy vấn theo dữ liệu nhập

$stmt->bindValue( 1 , $bien);

$stmt->execute();

Trang 28

Xuất dữ liệu

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {

echo “{prop: ” $row["thuoctinh“] “}”;

}

Trang 29

Đọc sai: Người dùng A cập nhật giá trị Người dùng B đọc

giá trị đã cập nhật Người dùng A undo lại thao tác => Giá trị B đọc được không còn đúng

Tính tổng sai: Người dùng A đang tính tổng thì người

dùng B thay đổi giá trị một số mục

Đọc giá trị không thể lặp: A đọc giá trị, B thay đổi giá trị, A

đọc lại thấy giá trị khác

Trang 31

Ví dụ Xử lý cập nhật đồng thời //Khóa các bảng cần thao tác

$query = "LOCK TABLES items READ, orders WRITE, customer READ";

$query = "UPDATE orders SET discount = $discount WHERE cust_id =

$custId AND order_id = $orderId";

if (!$db->exec($query)) showerror();

}

// Mở khóa các bảng

$db->exec("UNLOCK TABLES“);

Trang 32

Lưu ý khi khóa các bảng

• Sau khi khóa xong phải mở khóa các bảng

• Không cần khóa các bảng nếu chỉ thực hiện một truy vấn

Trang 33

Sử dụng ORM

Trang 36

$books = Book:: where (‘tentacgia’, ’=’ , ’Nguyen Van A’)

-> where (‘namxb’, ’<’ , ’2017’)->all();

$books = Book::where(‘tentacgia’,’=’,’Nguyen Van A’)

->take(5)->get();

$books = Book:orderBy(‘namxb’,’desc’)->get();

Trang 37

Thêm mới, cập nhật, xóa

Trang 38

class Reader extends Model {

protected $table = 'Docgia';

public function card() {

class Card extends Model {

protected $table = 'Thedoc';

public function reader() {

"select * from Docgia where

madg in (select madg from Thedoc where mathe=100)"

Trang 39

protected $table = 'Docgia';

public function books()

class Book extends Model {

protected $table = 'Sach';

public function reader() {

return $this-> belongsTo('App\Models\Reader', 'madg');

"select * from Docgia where

madg in (select madg from Sach

where masach=100)"

Trang 40

class Author extends Model {

protected $table = 'Tacgia';

public function books() {

class Book extends Model {

protected $table = 'Sach';

public function authors() {

$books = Author::find(100)->books;

=>

"select * from Sach where masach in

(select masach from VietSach where

matg=100)"

Trang 41

Tiếp theo

Lưu trạng thái và đảm bảo an ninh

Ngày đăng: 21/07/2023, 16:52

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm