1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng phát triển ứng dụng web – web programming chương 11 kết nối PHP với MySQL

61 375 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

Định dạng
Số trang 61
Dung lượng 5,4 MB

Nội dung

Các kiểu dữ liệu cơ bản trong MySQL 2.. Các lệnh thông dụng trong MySQL 3.. Các kiểu dữ liệu cơ bản trong MySQLcharlength tối đa 255 ký tự, chiều dài cố định = length varcharlength tối đ

Trang 1

Kết nối PHP với MySQL

Ths Lương Trần Hy Hiến, khoa CNTT, ĐH Sư phạm TpHCM

Trang 2

Nội dung

1 Các kiểu dữ liệu cơ bản trong MySQL

2 Các lệnh thông dụng trong MySQL

3 Kết nối MySQL từ PHP

4 Quy trình kết nối vào MySQL

5 Các bước truy cập CSDL MySQL

2

Trang 3

1 Các kiểu dữ liệu cơ bản trong MySQL

char(length) tối đa 255 ký tự, chiều dài cố định = length

varchar(length) tối đa 255 ký tự, chiều dài động <= length

text tối đa 65536 ký tự

int(length) -2.147.483.648 đến +2.147.483.647

tối đa length chữ số trong đó dec chữ số

Trang 5

Kiểu Mô tả

CREATE tạo CSDL hoặc bảng

ALTER thay đổi bảng có sẵn

SELECT chọn dữ liệu từ bảng

DELETE xóa dữ liệu khỏi bảng

DESCRIBE xem thông tin mô tả về cấu trúc bảng INSERT INTO ghi giá trị vào bảng

2 Các lệnh thông dụng trong MySQL

Trang 6

2 Các lệnh thông dụng trong MySQL

CREATE INDEX indexname ON tablename (column [ASC|DESC], ); CREATE PROCEDURE procedurename( [parameters] ) BEGIN END;

CREATE TABLE tablename

(

column datatype [NULL|NOT NULL] [CONSTRAINTS],

column datatype [NULL|NOT NULL] [CONSTRAINTS],

Trang 7

2 Các lệnh thông dụng trong MySQL

ALTER TABLE tablename

Trang 9

2 Các lệnh thông dụng trong MySQL

VD:

‘K29.103.010’

Trang 10

2 Các lệnh thông dụng trong MySQL

INSERT INTO tablename [(columns, )]

Trang 11

2 Các lệnh thông dụng trong MySQL

Trang 12

2 Các lệnh thông dụng trong MySQL

DROP DATABASE | INDEX | PROCEDURE |

TABLE | TRIGGER | USER | VIEW itemname;

VD:

• Xóa bảng SINHVIEN: DROP TABLE SinhVien

• Xóa CSDL QLSV: DROP DATABASE QLSV;

Trang 13

Giao tiếp dòng lệnh

• Kết nối mysql server

mysql [-h hostname] [-P portnumber] -u username -p

mysql [-h hostname] [-P portnumber] user=user

password=pass

Nhập lệnh sau dấu nhắc lệnh mysql >

Mỗi lệnh SQL kết thúc bằng dấu ;

Trang 15

3 Kết nối MySQL từ PHP

PHP scriptmysql mysqli

Trang 16

Thư viện mysql cải tiến trong PHP5

• Thiết lập trong php.ini

extension=php_mysqli.dll

• Ưu điểm

– Hỗ trợ lập trình hướng đối tượng

– Hỗ trợ nhân bản và phân tán CSDL

– Nén và mã hóa dữ liệu trên kết nối

– Tối ưu hiệu năng và mã

• Nhược điểm

– Chỉ làm việc với CSDL MySQL

Trang 17

4 Quy trình kết nối vào MySQL

Trang 18

Bước 1: Mở kết nối đến CSDL

// OOP mysqli

$mysqli = new mysqli ('hostname',

'username', 'password', 'dbname');

// mysqli

$link = mysqli_connect ('hostname',

'username', 'password', 'dbname');

Trang 20

mysqli_query($link, "SET NAMES ‘character set’")

VD: SET NAMES UTF8

Trang 22

$row = mysqli_fetch_row($result)

$row = mysqli_fetch_assoc($result)

$row = mysqli_fetch_array($result, result_type)

Trang 25

5 Các bước truy cập CSDL MySQL

1 Tạo kết nối đến database server

2 Lựa chọn CSDL

3 Xây dựng truy vấn và thực hiện truy vấn

4 Xử lý kết quả trả về

5 Đóng kết nối đến server

Trang 26

Khai báo sử dụng CSDL MySQL

•Khai báo kết nối CSDL:

<? php

$dbhost = ‘localhost’;

$dbuser = 'root';

$dbpass = 'password';

$conn = mysqli_connect ($dbhost, $dbuser,

$dbpass) or die (Không thể kết nối CSDL

Trang 27

Khai báo sử dụng CSDL MySQL (tt)

• Truy vấn dữ liệu:

$result = mysqli_query (‘câu_truy_vấn’);

• Giải phóng tài nguyên truy vấn

Trang 29

P HP D ata O bjects

Trang 30

PDO (PHP Data Object)

• Ưu điểm:

– Áp dụng từ PHP 5.0 (tích hợp sẵn trong PHP 5.1)

– Cung cấp giao tiếp hướng đối tượng

– Cung cấp một giao tiếp nhất quán cho phép lưu chuyển dữ liệu giữa các hệ cơ sở dữ liệu khác nhau như Oracle, DB2, Microsoft SQL Server, PostgreSQL

• Nhược điểm:

– Không làm việc trên PHP phiên bản < 5.0.

– Không tận dụng ưu điểm của các tính năng tiên tiến mới của MySQL phiên bản 4.1.3 trở lên, như tính năng lồng câu lệnh SQL.

30

Trang 31

Kết nối CSDL PDO

try {

$dbh = new PDO ($dsn ,

$user , $password , $options );

} catch (PDOException $e) {

echo “Failed to connect:”

$e->getMessage();

Trang 33

Quản lý kết nối

try {

$dbh = new PDO($dsn, $user, $pw);

} catch (PDOException $e) {

echo “connect failed:” $e->getMessage();

Trang 35

Các kiểu duyệt (fetch type)

Trang 36

“ UPDATE HangHoa SET active=1 ”

“WHERE NAME LIKE ‘ %coke% ’”);

Trang 37

Prepared Statements

• Quoting is annoying, but essential

• PDO offers a better way

$stmt->prepare(‘INSERT INTO Account (email,

fullname) VALUES (:email, :fullname)’);

$stmt->execute(array(

‘:email’ => ‘teo.tran@gmail.com’,

‘:fullname’ => ‘Trần Văn Tèo’

Trang 38

Prepared Statements

$stmt->prepare(‘INSERT INTO Account (email, fullname) VALUES (:email, :fullname)’);

$stmt->bindParam(':fullname', $fullname);

$stmt->bindParam(':email', $email);

Trang 39

Binding for output

$stmt = $dbh->prepare(

"SELECT extension, name from CREDITS");

if ($stmt->execute()) {

$stmt->bindColumn(‘extension', $extension);

$stmt->bindColumn(‘name', $name);

while ($stmt->fetch(PDO_FETCH_BOUND)) {

echo “Extension: $extension\n”;

echo “Author: $name\n”;

Trang 41

Get ID of The Last Inserted Record

• $sql = "INSERT INTO Account (fullname, email) VALUES ('John Doe', 'john@exam.com')";

Trang 42

Insert Multiple (1/2) - mysqli

• $sql = "INSERT INTO Account (fullname, email)VALUES ('John Doe', 'john@example.com');";

$sql = "INSERT INTO Account (fullname, email)VALUES ('Mary Moe', 'mary@example.com');";

$sql = "INSERT INTO Account (fullname, email) VALUES ('Julie Dooley', 'julie@example.com')";

• if ($conn->multi_query($sql) === TRUE)

echo "New records created successfully";

• if (mysqli_multi_query($conn, $sql))

echo "New records created successfully"; 42

Trang 43

Insert Multiple (2/2) - PDO

• // begin the transaction

$conn->beginTransaction();

• // our SQL statememtns

$conn->exec("INSERT INTO Account (fullname,

email) VALUES ('John Doe', 'john@exam.com')");

$conn->exec("INSERT INTO Account (fullname,

email) VALUES ('Mary Moe', 'mary@exam.com')");

$conn->exec("INSERT INTO Account (fullname,

email) VALUES ('Julie Dooley', 'julie@exam.com')");

Trang 44

Kiểm tra hợp lệ trên Server

$data = preg_match (“/[^A-Z]/”, $value);

if (!$data) alert (“valid”);

else alert (“invalid”);

}

Trang 45

Validating data:

/ r / defines a specific character / / matches any single character / \ / matches dot (nokta)

[ 0-9 ] matches a named range of

characters

[ ^a-z ] NOT small letters

Character classes:

Trang 46

{n, m} repeats between n and m times

{n,} repeats at least n times (n or more) ( ) grouping (like math)

Trang 47

Nguy cơ đối với người dùng cuối

Trang 48

SQL Injection

48

Trang 49

SQL Injection

• Là một kỹ thuật cho phép những kẻ tấn công thi hành các câu lệnh truy vấn SQL bất hợp

pháp.

• Bằng cách lợi dụng lỗ hổng trong việc kiểm tra

dữ liệu nhập trong các ứng dụng web.

Trang 50

SELECT * FROM LOGIN WHERE username=‘hien’

AND password=‘123’;

Trang 51

An SQL injection attack: input modifies query Changes from secure to insecure

SELECT * FROM LOGIN WHERE username=$_POST[‘Username’] AND password=$_POST[‘Password’];

Trang 52

Captures all data on the table

“OR 1” clause is always true

SELECT * FROM LOGIN WHERE username=$_POST[‘Username’] AND password=$_POST[‘Password’];

Trang 53

Captures all data in table

X always equals X; entire table in recordset

If username AND password on same table…

SELECT * FROM LOGIN WHERE username=$_POST[‘Username’]

Trang 54

Attacking a number field (won’t work in example)

One always equals one (all fields returned)

SELECT * FROM LOGIN WHERE age=$_POST[‘age’];

Trang 55

SQL injection attacks:

‘mysqli_query’: one query per command

$query1 = mysqli_query (“INSERT INTO tbluser VALUES (‘’,

‘$_POST[Username]’, ‘$_POST[LastName]’,

‘$_POST[FirstName]’)” );

Trang 56

SELECT * FROM LOGIN WHERE Username=$_POST[‘Username’];

x'; INSERT INTO members (‘User’, ‘pass’,

‘FirstName’, ‘LastName’) VALUES (‘test01’,‘smelly’‘Steve’,‘Johnson’);

Trang 57

SQL injection attacks:

Delete/create a new table

Username

SELECT * FROM LOGIN WHERE Username=$_POST[‘Username’];

SELECT * FROM LOGIN WHERE Username=‘Me’; DROP table Order;

x’; DROP table tblorder; x’; CREATE TABLE steve (id INT(5), name VARCHAR(15));

Trang 59

Ví dụ

Trang 60

Q & A

Trang 61

THE END

Ngày đăng: 28/04/2016, 16:33

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w