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

Bài 3: PHP Database

Nguyễn Hữu Thể

1

Nội dung

▪ PHP MySQL Introduction

▪ PHP MySQL Connect to a Database

▪ PHP MySQL Create Database and Tables

▪ PHP MySQL Insert Into

▪ PHP MySQL Select

▪ PHP MySQL The Where Clause

▪ PHP MySQL Order By Keyword

▪ PHP MySQL Update

▪ PHP MySQL Delete

▪ MySQL & Font Unicode

▪ MySQLi

2

PHP MySQL Introduction

− MySQL là hệ cơ sở dữ liệu nguồn mở phổ biến nhất. − Một cơ sở dữ liệu thường bao gồm một hoặc nhiều table.

▪ Mỗi table được xác định bởi một tên (ví dụ: " Customers" hoặc "

Orders").

▪ Table chứa các records (rows) với các dữ liệu.

− Ví dụ: table "Persons":

3

Queries

− Một query là một câu hỏi hoặc yêu cầu. − Với MySQL, chúng ta có thể truy vấn một cơ sở dữ liệu để có

thông tin cụ thể và trả về một recordset.

− Xem câu truy vấn sau:

− Câu truy vấn trên chọn tất cả các dữ liệu trong cột "LastName",

và trả về một recordset như sau:

4

PHP MySQL Create Database and Tables

− Một cơ sở dữ liệu chứa một hoặc nhiều table.

❖ Create a Database − CREATE DATABASE : tạo ra một cơ sở dữ liệu MySQL.

❖ Syntax

Ví dụ: tạo database có tên là myDB CREATE DATABASE myDB

5

Create a Table

− CREATE TABLE : tạo ra một bảng trong MySQL. ❖ Syntax

AUTO_INCREMENT : tự động tăng giá trị của field lên 1 mỗi khi một record mới được thêm vào.

Ví dụ: tạo table MyGuest: CREATE TABLE MyGuests (

id INT AUTO_INCREMENT PRIMARY KEY, firstname VARCHAR(30) NOT NULL, lastname VARCHAR(30) NOT NULL, email VARCHAR(50), reg_date TIMESTAMP )

6

PHP MySQL Insert Into

❖ Syntax − Không xác định tên cột dữ liệu được chèn vào, chỉ đưa vào giá trị INSERT INTO table_name VALUES (value1, value2, value3,...)

− Quy định cụ thể cả các tên cột và các giá trị sẽ được chèn vào INSERT INTO table_name (column1, column2, column3,...) VALUES (value1, value2, value3,...)

Ví dụ: INSERT INTO MyGuests (firstname, lastname, email) VALUES (‘Khánh', 'Nguyễn', ‘khanh@example.com')

7

PHP MySQL Select

− Câu lệnh SELECT được sử dụng để chọn dữ liệu từ một cơ sở dữ

liệu.

❖ Syntax

8

PHP MySQL The Where Clause

− Mệnh đề WHERE được sử dụng để trích xuất các record theo

một tiêu chuẩn quy định.

❖ Syntax:

SELECT id, firstname, lastname FROM MyGuests

9

PHP MySQL Order By Keyword

− Từ khoá ORDER BY : sắp xếp dữ liệu trong một recordset. − ORDER BY sắp xếp records theo thứ tự tăng dần (mặc định). − Nếu muốn thứ tự giảm dần, sử dụng từ khoá DESC.

❖ Syntax:

10

PHP MySQL Update

− Câu lệnh UPDATE : sửa đổi dữ liệu trong một table.

❖ Syntax

UPDATE MyGuests SET lastname='Kiệt' WHERE id=2

11

PHP MySQL Delete

− Câu lệnh DELETE : xóa các record trong một table.

❖ Syntax

DELETE FROM MyGuests WHERE id=3

12

Limit

SELECT * FROM MyGuests LIMIT 30

SELECT * FROM MyGuests LIMIT 15, 10

13

PHP MySQL Connect to a Database

− PHP 5 and later can work with a MySQL database using: ▪ MySQLi extension (the "i" stands for improved)

▪ PDO (PHP Data Objects) − Should I Use MySQLi or PDO?

▪ PDO will work on 12 different database systems, whereas

MySQLi will only work with MySQL databases.

▪ Both are object-oriented, but MySQLi also offers a

procedural API.

▪ Both support Prepared Statements. Prepared Statements

protect from SQL injection.

14

MySQLi and PDO

− Three ways of working with PHP and MySQL:

▪ MySQLi (object-oriented)

▪ MySQLi (procedural)

▪ PDO

15

Open a Connection to MySQL

MySQLi Object-Oriented

MySQLi Procedural

// Create connection $conn = new mysqli($servername, $username, $password); // Create connection $conn = mysqli_connect($servername, $username, $password);

die("Connection failed: " . $conn->connect_error);

die("Connection failed: " . mysqli_connect_error());

// Check connection if ($conn->connect_error) { // Check connection if (!$conn) {

} echo "Connected successfully"; ?> } echo "Connected successfully"; ?>

16

Open a Connection to MySQL

PDO

try {

$conn = new PDO("mysql:host=$servername;dbname=myDB",

// set the PDO error mode to exception $conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); echo "Connected successfully";

$username, $password);

}catch(PDOException $e){

} ?>

echo "Connection failed: " . $e->getMessage();

17

Close the Connection

− The connection will be closed automatically when the script ends. To close the connection before, use the following:

▪ Example (MySQLi Object-Oriented)

• $conn->close();

▪ Example (MySQLi Procedural)

• mysqli_close($conn);

▪ Example (PDO)

• $conn = null;

18

MySQL & Font Unicode

Encode

Decode

19

Insert (MySQLi Procedural)

PHP & MySQL

die("Connection failed: " . mysqli_connect_error());

} // Change character set to utf8 mysqli_set_charset($conn,"utf8"); $sql = "INSERT INTO MyGuests (firstname, lastname, email) VALUES ('John', 'Doe', 'john@example.com')"; if (mysqli_query($conn, $sql)) {

$last_id = mysqli_insert_id($conn); echo "New record created successfully. Last inserted ID is: " . $last_id;

} else {

echo "Error: " . $sql . "
" . mysqli_error($conn);

20

} mysqli_close($conn); ?>

Insert (MySQLi Object-oriented)

PHP & MySQL

// Create connection $conn = new mysqli($servername, $username, $password, $dbname); // Check connection if ($conn->connect_error) {

die("Connection failed: " . $conn->connect_error);

} $sql = "INSERT INTO MyGuests (firstname, lastname, email) VALUES ('John', 'Doe', 'john@example.com')";

if ($conn->query($sql) === TRUE) {

$last_id = $conn->insert_id; echo "New record created successfully. Last inserted ID is: " . $last_id;

} else {

echo "Error: " . $sql . "
" . $conn->error;

21

} $conn->close(); ?>

Insert (PDO)

PHP & MySQL

try {

$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username,

$password);

// set the PDO error mode to exception $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "INSERT INTO MyGuests (firstname, lastname, email) VALUES ('John', 'Doe', 'john@example.com')"; // use exec() because no results are returned $conn->exec($sql); $last_id = $conn->lastInsertId(); echo "New record created successfully. Last inserted ID is: " . $last_id;

}catch(PDOException $e){

echo $sql . "
" . $e->getMessage();

22

} $conn = null; ?>

Select Data With MySQLi (MySQLi Procedural) PHP & MySQL

$conn = mysqli_connect($servername, $username, $password, $dbname); if (!$conn) {

die("Connection failed: " . mysqli_connect_error());

} $sql = "SELECT id, firstname, lastname FROM MyGuests"; $result = mysqli_query($conn, $sql);

if (mysqli_num_rows($result) > 0) {

// output data of each row while($row = mysqli_fetch_assoc($result)) {

} } else {

echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "
";

echo "0 results";

23

} mysqli_close($conn); ?>

Select Data With MySQLi (MySQLi Object-oriented) PHP & MySQL

$conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) {

die("Connection failed: " . $conn->connect_error);

} $sql = "SELECT id, firstname, lastname FROM MyGuests"; $result = $conn->query($sql);

if ($result->num_rows > 0) { // output data of each row while($row = $result->fetch_assoc()) {

} } else {

echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "
";

echo "0 results";

24

} $conn->close(); ?>

Select Data With MySQLi (MySQLi Object-oriented): HTML table

PHP & MySQL

$conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); }

$sql = "SELECT id, firstname, lastname FROM MyGuests"; $result = $conn->query($sql); if ($result->num_rows > 0) {

echo "

"; // output data of each row while($row = $result->fetch_assoc()) {

echo "

";

} echo "

IDName
".$row["id"]."".$row["firstname"]." ".$row["lastname"]."
";

} else {

echo "0 results";

25

} $conn->close(); ?>

PHP Delete Data From MySQL (MySQLi Procedural)

PHP & MySQL

$conn = mysqli_connect($servername, $username, $password, $dbname); if (!$conn) {

die("Connection failed: " . mysqli_connect_error());

// sql to delete a record $sql = "DELETE FROM MyGuests WHERE id=3";

}

if (mysqli_query($conn, $sql)) {

} else {

echo "Record deleted successfully";

echo "Error deleting record: " . mysqli_error($conn);

} mysqli_close($conn); ?>

26

PHP Delete Data From MySQL (MySQLi Object-oriented)

PHP & MySQL

$conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) {

}

die("Connection failed: " . $conn->connect_error);

if ($conn->query($sql) === TRUE) {

// sql to delete a record $sql = "DELETE FROM MyGuests WHERE id=3";

echo "Record deleted successfully";

} else {

echo "Error deleting record: " . $conn->error;

} $conn->close(); ?>

27

PHP Update Data in MySQL (MySQLi Procedural)

PHP & MySQL

$conn = mysqli_connect($servername, $username, $password, $dbname); if (!$conn) {

die("Connection failed: " . mysqli_connect_error());

}

$sql = "UPDATE MyGuests SET lastname='Doe' WHERE id=2"; if (mysqli_query($conn, $sql)) {

echo "Record updated successfully";

} else {

echo "Error updating record: " . mysqli_error($conn);

} mysqli_close($conn); ?>

28

PHP Update Data in MySQL (MySQLi Object-oriented)

PHP & MySQL

$conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) {

die("Connection failed: " . $conn->connect_error);

}

$sql = "UPDATE MyGuests SET lastname='Doe' WHERE id=2";

if ($conn->query($sql) === TRUE) {

echo "Record updated successfully";

} else {

echo "Error updating record: " . $conn->error;

} $conn->close(); ?>

29

PHP Update Data in MySQL (PDO)

PHP & MySQL

$conn = new PDO("mysql:host=$servername;dbname=$dbname",

$username, $password);

// set the PDO error mode to exception $conn->setAttribute(PDO::ATTR_ERRMODE,

PDO::ERRMODE_EXCEPTION);

$sql = "UPDATE MyGuests SET lastname='Doe' WHERE id=2"; // Prepare statement $stmt = $conn->prepare($sql); // execute the query $stmt->execute(); // echo a message to say the UPDATE succeeded echo $stmt->rowCount() . " records UPDATED successfully";

30

} catch(PDOException $e) { echo $sql . "
" . $e->getMessage(); } $conn = null; ?>

Ví dụ

- Tạo 3 file: dbcon.php: chứa kết nối CSDL - add-myguest.php: giao diện nhập liệu - process-add-myguest.php: code xử lý thêm dữ liệu đã nhập

dbcon.php

$conn = mysqli_connect($servername, $username, $password, $dbname); if (!$conn) {

die("Connection failed: " . mysqli_connect_error());

} mysqli_set_charset($conn,"utf8"); ?>

31

PHP & MySQL

add-myguest.php

Họ: 
Tên: 
Email: 

32

PHP & MySQL process-add-myguest.php

$lastname = $_POST["lastname"]; $firstname = $_POST["firstname"]; $email = $_POST["email"];

$sql = "INSERT INTO MyGuests (firstname, lastname, email) VALUES ('$lastname', '$firstname', '$email')";

if (mysqli_query($conn, $sql)) {

echo "Success";

} else {

echo "Fail";

} mysqli_close($conn); ?>

33

PHP & MySQL

Dữ liệu mẫu đã thêm vào table MyGuests

34

PHP & MySQL

− Tạo database: TinTucOnline, có diagram như hình:

35