Tải bản đầy đủ (.pdf) (37 trang)

bài 2 các kỹ thuật lập trình mysql với php nâng cao

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 (494.46 KB, 37 trang )

Bài 2
Các kỹ thuật lập trình MySQL
với PHP nâng cao
Phân biệt khi nào sử dụng PDO và mở rộng
mysqli
Cách sử dụng câu lệnh dựng sẵn khi làm việc với
PDO
Cách sử dụng chế độ hiển thị lỗi
Cách sử dụng mysqli trong cả hai hướng lập
trình hướng đối tượng và hướng cấu trúc
Mục tiêu
Bài 2 - Các kỹ thuật lập trình MySQL với PHP nâng cao
2
PDO
Mysqli
Hàm PHP làm việc với MySql có sẵn
Các cách sử dụng PHP
để làm việc với MySQL
Bài 2 - Các kỹ thuật lập trình MySQL với PHP nâng cao
3
Làm việc với truy vấn dựng sẵn
Ưu nhược điểm của PDO
Thiết lập chế độ hiển thị lỗi cho PDO
Làm việc với PDO
Bài 2 - Các kỹ thuật lập trình MySQL với PHP nâng cao
4
Ưu điểm:
Được tích hợp trong PHP phiên bản 5.1 trở lên và
dùng được cho phiên bản 5.0.
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.
Tận dụng hầu hết ưu điểm các tính năng mới của
MySQL phiên bản 4.1.3 trở lên.
PDO (PHP Data Object)
Bài 2 - Các kỹ thuật lập trình MySQL với PHP nâng cao
5
Nhược điểm:
Không làm việc trên PHP phiên bản 4.x, 3.x hay các
phiên bản trước đó.
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.
PDO (PHP Data Object)
Bài 2 - Các kỹ thuật lập trình MySQL với PHP nâng cao
6
Ưu điểm:
Được tích hợp trong PHP phiên bản 5 trở lên.
Hỗ trợ cả giao tiếp hướng đối tượng và giao tiếp kiểu
cấu trúc.
Tận dụng tất cả các tính năng mới của MySQL phiên
bản 4.1.3 trở lên.
Nhược điểm:
Không làm việc với các hệ cơ sở dữ liệu khác ngoài
MySQL.
mysqli (mở rộng MySQL cải tiến)
Bài 2 - Các kỹ thuật lập trình MySQL với PHP nâng cao
7
prepare($sql_statement)
lastInsertId()

Một số phương thức của lớp PDO
Bài 2 - Các kỹ thuật lập trình MySQL với PHP nâng cao
8
bindValue($param, $value)
execute()
fetchAll()
fetch()
rowCount()
closeCursor()
Một số phương thức
của lớp PDOStatement
Bài 2 - Các kỹ thuật lập trình MySQL với PHP nâng cao
9
Sử dụng phương thức fetchAll để trả về tập kết
quả:
Ví dụ
Bài 2 - Các kỹ thuật lập trình MySQL với PHP nâng cao
10
$query = 'SELECT * FROM products';
$statement = $db->prepare($query);
$statement->execute();
$products = $statement->fetchAll();
$statement->closeCursor();
foreach ($products as $product) {
echo $product['productName'] . '<br />';
}
Sử dụng phương thức fetch để duyệt qua một
tập kết quả:
Ví dụ
Bài 2 - Các kỹ thuật lập trình MySQL với PHP nâng cao

11
$query = 'SELECT * FROM products';
$statement = $db->prepare($query);
$statement->execute();
$product = $statement->fetch(); // lấy bản ghi đầu tiên
while ($product ! = null) {
echo $product['productName'] . '<br />';
$product = $statement->fetch(); // lấy bản ghi
tiếp theo
}
$statement->closeCursor();
Sử dụng tham số danh định
(named parameter)
Bài 2 - Các kỹ thuật lập trình MySQL với PHP nâng cao
12
$category_id = 1;
$price = 400;
$query = 'SELECT * FROM products
WHERE categoryID = :categoryid
AND listPrice > :price';
$statement = $db->prepare($query);
$statement->bindValue(':categoryid', $category_id);
$statement->bindValue(':price', $price);
$statement->execute();
$products = $statement->fetchAll();
$statement->closeCursor();
Sử dụng tham số dấu hỏi
(question mark parameter)
Bài 2 - Các kỹ thuật lập trình MySQL với PHP nâng cao
13

$query = 'SELECT * FROM products
WHERE categoryID = ?
AND listPrice > ?';
$statement = $db->prepare($query);
$statement->bindValue(1, $category_id);
$statement->bindValue(2, $price);
$statement->execute();
$products = $statement->fetchAll();
$statement->closeCursor();
Thay đổi dữ liệu
Bài 2 - Các kỹ thuật lập trình MySQL với PHP nâng cao
14
// Dữ liệu mẫu
$category_id = 2;
$code = 'hofner';
$name = 'Hofner Icon';
$price = '499.99';
// Thiết lập và thực thi câu lệnh
$query = 'INSERT INTO products
(categoryID, productCode, productName, listPrice)
VALUES
(:category_id, :code, :name, :price)';
$statement = $db->prspare($query);
$statement->bindValue(':categoryid', $category_id);
$statement->bindValue(':code', $code);
$statement->bindValue(':name', $name);
$statement->bindValue(':price', $price);
$success = $statement->execute();
Thay đổi dữ liệu
Bài 2 - Các kỹ thuật lập trình MySQL với PHP nâng cao

15
$row_count = $statement->rowCount();
$statement->closeCursor();
// Lấy ID sản phẩm cuối cùng
$product_id = $db->lastlnsertId();
// Hiển thị thông báo cho người sử dụng
if ($success) {
echo "<p>$row_count row(s) was inserted with this ID:
$product_id</p>"; } else {
echo "<p>No rows were inserted.</p>";
}
ERRMODE_SILENT
ERRMODE_WARNING
ERRMODE_EXCEPTION
Ba chế độ xử lý lỗi của PDO
Bài 2 - Các kỹ thuật lập trình MySQL với PHP nâng cao
16
Sử dụng hàm khởi tạo của lớp PDO để thiết lập
chế độ xử lý lỗi:
Ví dụ
Bài 2 - Các kỹ thuật lập trình MySQL với PHP nâng cao
17
$dsn = 'mysql:host=localhost;dbname=my_guitar_shopl';
$username = 'mgs_user';
$password = 'pa55word';
$options = array(PDO::ATTR_ERRMODE =>
PDO::ERRMODEEXCEPTION);
try {
$db = new PDO($dsn, $username, $password, $options);
} catch (PDOException $e) {

$error_message = $e->getMessage();
echo "<p>Error connecting to database: $error_message
</p>";
exit();
}
Sử dụng phương thức setAttribute để thiết lập
chế độ xử lý lỗi:
Sử dụng cặp lệnh try/catch để bắt các đối tượng
PDOException:
Ví dụ
Bài 2 - Các kỹ thuật lập trình MySQL với PHP nâng cao
18
$db->setAttribute(PDO::ATTRERRMODE, PDO::ERRMODE_EXCEPTION);
try {
$query = 'SELECT * FROM product';
$statement = $db->prepare($query);
$statement->execute();
$products = $statement->fetchAll();
$statement->closeCursor();
} catch (PDOException $e) {
$error_message = $e->getMessage();
echo "<p>Database error: $error_message </p>";
exit();
Kết nối với CSDL
Truy vấn và cập nhật dữ liệu
Làm việc với truy vấn dựng sẵn
So sánh giao diện hướng đối tượng và hướng
cấu trúc
Làm việc với mysqli
Bài 2 - Các kỹ thuật lập trình MySQL với PHP nâng cao

19
Kết nối đến cơ sở dữ liệu MySQL (kiểu hướng
đối tượng):
Hướng dẫn kết nối đến cơ sở dữ liệu MySQL
(kiểu cấu trúc):
mysqli
Bài 2 - Các kỹ thuật lập trình MySQL với PHP nâng cao
20
$host = 'localhost';
$username = 1mgsuser';
$password = 'pa55word';
$db_name = 'myguitarahopl';
@ $db = new mysqli($host, $username, $password,
$db_name);
$host = 'localhost';
$username = 'mgsuser';
$password = 'pa55word';
$db_name = 'my_guitar_shopl';
@ $db = mysqliconnect($host, $username, $password,
$db_name);
Connect_errno
Connect_error
Hai thuộc tính của đối tượng mysqli
dùng để kiểm tra lỗi kết nối
Bài 2 - Các kỹ thuật lập trình MySQL với PHP nâng cao
21
Kiểm tra lỗi kết nối (kiểu hướng đối tượng):
Hướng dẫn kiểm tra lỗi kết nối (kiểu cấu trúc):
Ví dụ
Bài 2 - Các kỹ thuật lập trình MySQL với PHP nâng cao

22
$connection_error = $db->connect_error;
if ($connection_error 1= null) {
echo "<p>Error connecting to database:
$connection_error</p>"; exit();
}
$connection_error = mysqli_connect_error();
if ($connection_error != null) {
echo "<p>Error connecting to database:
$connection_error</p>"; exit();
}
Phương thức của lớp mysqli trả về tập kết quả:
Thuộc tính và phương thức của lớp
mysqli_resultset:
Lớp mysqli
Bài 2 - Các kỹ thuật lập trình MySQL với PHP nâng cao
23
Phương
thức
Giải
thích
query(
$select_statement)
Thực
thi câu lệnh SQL trong ngoặc và trả về đối
tượng
mysqli cho tập kết quả. Nếu không có kết
quả
nào được tìm thấy, hàm sẽ trả về giá trị
FALSE

Thuộc
tính/Phương thức
Giải
thích
num_rows
Số
bản ghi của tập kết quả.
Fetch_assoc
()
Trả
về tập kết quả là một mảng liên kết
Hướng dẫn thực thi câu lệnh SELECT:
Ví dụ
Bài 2 - Các kỹ thuật lập trình MySQL với PHP nâng cao
24
// Thực thi câu lệnh
$category_id = 2;
$query = "SELECT * FROM products
WHERE categoryID = $category_id";
$result = $db->query($query);
// Kiểm tra tập kết quả trả về
if ($result == false) {
$error_message = $db->error;
echo "<p>An error occurred: $error_message</p>"; exit{);
}
// Lấy ra số dòng có trong tập kết quả
$row_count = $result->num_rows;
Hướng dẫn hiển thị kết quả:
Ví dụ
Bài 2 - Các kỹ thuật lập trình MySQL với PHP nâng cao

25
<?php for ($i = 0; $i < $row_count; $i++) :
$product = $result->fetch_assoc();
?>
<tr>
<tdx?php echo $product ['productID1 ] ; ?></td>
<tdx?php echo $product ['categoryID1 ] ; ?></td>
<tdx?php echo $product ['productCode'] ; ?></td>
<tdx?php echo $product ['productName'] ; ?x/td>
<tdx?php echo $product ['listPrice'] ; ?x/td>
</tr>
<?php endfor; ?>

×