web301 slide 2
DESCRIPTION
Lập Trình Web PHP Nâng Cao - Giáo Trình FPTTRANSCRIPT
![Page 1: Web301 slide 2](https://reader038.vdocuments.pub/reader038/viewer/2022110310/55954c3c1a28abc4548b469f/html5/thumbnails/1.jpg)
Bài 2Các kỹ thuật lập trình MySQL
với PHP nâng cao
![Page 2: Web301 slide 2](https://reader038.vdocuments.pub/reader038/viewer/2022110310/55954c3c1a28abc4548b469f/html5/thumbnails/2.jpg)
Phân biệt khi nào sử dụng PDO và mở rộngmysqliCách sử dụng câu lệnh dựng sẵn khi làm việc vớiPDOCách sử dụng chế độ hiển thị lỗiCách sử dụng mysqli trong cả hai hướng lậptrì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
![Page 3: Web301 slide 2](https://reader038.vdocuments.pub/reader038/viewer/2022110310/55954c3c1a28abc4548b469f/html5/thumbnails/3.jpg)
PDOMysqliHà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
![Page 4: Web301 slide 2](https://reader038.vdocuments.pub/reader038/viewer/2022110310/55954c3c1a28abc4548b469f/html5/thumbnails/4.jpg)
Làm việc với truy vấn dựng sẵnƯu nhược điểm của PDOThiế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
![Page 5: Web301 slide 2](https://reader038.vdocuments.pub/reader038/viewer/2022110310/55954c3c1a28abc4548b469f/html5/thumbnails/5.jpg)
Ư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ưuchuyển dữ liệu giữa các hệ cơ sở dữ liệu khác nhaunhư 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ủaMySQL 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
![Page 6: Web301 slide 2](https://reader038.vdocuments.pub/reader038/viewer/2022110310/55954c3c1a28abc4548b469f/html5/thumbnails/6.jpg)
Nhược điểm:Không làm việc trên PHP phiên bản 4.x, 3.x hay cácphiê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ếnmới của MySQL phiên bản 4.1.3 trở lên, như tínhnă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
![Page 7: Web301 slide 2](https://reader038.vdocuments.pub/reader038/viewer/2022110310/55954c3c1a28abc4548b469f/html5/thumbnails/7.jpg)
Ư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ểucấu trúc.Tận dụng tất cả các tính năng mới của MySQL phiênbả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àiMySQL.
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
![Page 8: Web301 slide 2](https://reader038.vdocuments.pub/reader038/viewer/2022110310/55954c3c1a28abc4548b469f/html5/thumbnails/8.jpg)
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
![Page 9: Web301 slide 2](https://reader038.vdocuments.pub/reader038/viewer/2022110310/55954c3c1a28abc4548b469f/html5/thumbnails/9.jpg)
bindValue($param, $value)execute()fetchAll()fetch()rowCount()closeCursor()
Một số phương thứccủa lớp PDOStatement
Bài 2 - Các kỹ thuật lập trình MySQL với PHP nâng cao 9
![Page 10: Web301 slide 2](https://reader038.vdocuments.pub/reader038/viewer/2022110310/55954c3c1a28abc4548b469f/html5/thumbnails/10.jpg)
Sử dụng phương thức fetchAll để trả về tập kếtquả:
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 />';}
![Page 11: Web301 slide 2](https://reader038.vdocuments.pub/reader038/viewer/2022110310/55954c3c1a28abc4548b469f/html5/thumbnails/11.jpg)
Sử dụng phương thức fetch để duyệt qua mộttậ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ênwhile ($product ! = null) {
echo $product['productName'] . '<br />';$product = $statement->fetch(); // lấy bản ghi
tiếp theo}$statement->closeCursor();
![Page 12: Web301 slide 2](https://reader038.vdocuments.pub/reader038/viewer/2022110310/55954c3c1a28abc4548b469f/html5/thumbnails/12.jpg)
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 = :categoryidAND listPrice > :price';
$statement = $db->prepare($query);$statement->bindValue(':categoryid', $category_id);$statement->bindValue(':price', $price);$statement->execute();$products = $statement->fetchAll();$statement->closeCursor();
![Page 13: Web301 slide 2](https://reader038.vdocuments.pub/reader038/viewer/2022110310/55954c3c1a28abc4548b469f/html5/thumbnails/13.jpg)
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 productsWHERE categoryID = ?AND listPrice > ?';
$statement = $db->prepare($query);$statement->bindValue(1, $category_id);$statement->bindValue(2, $price);$statement->execute();$products = $statement->fetchAll();$statement->closeCursor();
![Page 14: Web301 slide 2](https://reader038.vdocuments.pub/reader038/viewer/2022110310/55954c3c1a28abc4548b469f/html5/thumbnails/14.jpg)
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();
![Page 15: Web301 slide 2](https://reader038.vdocuments.pub/reader038/viewer/2022110310/55954c3c1a28abc4548b469f/html5/thumbnails/15.jpg)
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ụngif ($success) {echo "<p>$row_count row(s) was inserted with this ID:$product_id</p>"; } else {echo "<p>No rows were inserted.</p>";}
![Page 16: Web301 slide 2](https://reader038.vdocuments.pub/reader038/viewer/2022110310/55954c3c1a28abc4548b469f/html5/thumbnails/16.jpg)
ERRMODE_SILENTERRMODE_WARNINGERRMODE_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
![Page 17: Web301 slide 2](https://reader038.vdocuments.pub/reader038/viewer/2022110310/55954c3c1a28abc4548b469f/html5/thumbnails/17.jpg)
Sử dụng hàm khởi tạo của lớp PDO để thiết lậpchế độ 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();}
![Page 18: Web301 slide 2](https://reader038.vdocuments.pub/reader038/viewer/2022110310/55954c3c1a28abc4548b469f/html5/thumbnails/18.jpg)
Sử dụng phương thức setAttribute để thiết lậpchế độ xử lý lỗi:
Sử dụng cặp lệnh try/catch để bắt các đối tượngPDOException:
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();
![Page 19: Web301 slide 2](https://reader038.vdocuments.pub/reader038/viewer/2022110310/55954c3c1a28abc4548b469f/html5/thumbnails/19.jpg)
Kết nối với CSDLTruy vấn và cập nhật dữ liệuLàm việc với truy vấn dựng sẵnSo sánh giao diện hướng đối tượng và hướngcấ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
![Page 20: Web301 slide 2](https://reader038.vdocuments.pub/reader038/viewer/2022110310/55954c3c1a28abc4548b469f/html5/thumbnails/20.jpg)
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);
![Page 21: Web301 slide 2](https://reader038.vdocuments.pub/reader038/viewer/2022110310/55954c3c1a28abc4548b469f/html5/thumbnails/21.jpg)
Connect_errnoConnect_error
Hai thuộc tính của đối tượng mysqlidù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
![Page 22: Web301 slide 2](https://reader038.vdocuments.pub/reader038/viewer/2022110310/55954c3c1a28abc4548b469f/html5/thumbnails/22.jpg)
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();}
![Page 23: Web301 slide 2](https://reader038.vdocuments.pub/reader038/viewer/2022110310/55954c3c1a28abc4548b469f/html5/thumbnails/23.jpg)
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ớpmysqli_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ề đốitượng mysqli cho tập kết quả. Nếu không có kếtquả 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
![Page 24: Web301 slide 2](https://reader038.vdocuments.pub/reader038/viewer/2022110310/55954c3c1a28abc4548b469f/html5/thumbnails/24.jpg)
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 productsWHERE 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;
![Page 25: Web301 slide 2](https://reader038.vdocuments.pub/reader038/viewer/2022110310/55954c3c1a28abc4548b469f/html5/thumbnails/25.jpg)
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; ?>
![Page 26: Web301 slide 2](https://reader038.vdocuments.pub/reader038/viewer/2022110310/55954c3c1a28abc4548b469f/html5/thumbnails/26.jpg)
Giải phóng tài nguyên được dùng bởi tập kếtquả và kết nối cơ sở dữ liệu:
Ví dụ
Bài 2 - Các kỹ thuật lập trình MySQL với PHP nâng cao 26
$result->free(); // Giải phóng tập kết quả$db->close(); // Giải phóng kết nối tới cơ sở dữ liệu
![Page 27: Web301 slide 2](https://reader038.vdocuments.pub/reader038/viewer/2022110310/55954c3c1a28abc4548b469f/html5/thumbnails/27.jpg)
Thuộc tính Giải thích
affectedrows Trả về số hàng bị ảnh hưởng. Nếu không có hàng bị ảnh hưởng,thuộc tính này trả về số không
insert_id Trả về ID được tự động tạo ra trong truy vấn trước đó. Nếukhông có ID được tạo ra, thuộc tính này trả về số không
error Trả về thông báo lỗi nếu có lỗi xảy ra. Nếu không, nó sẽ trả vềmột chuỗi rỗng
errno Trả về số nguyên ký hiệu mã lỗi nếu có lỗi. Nếu không có lỗi, trảvề 0
Các thuộc tính của lớp mysqlidùng để kiểm tra kết quả
Bài 2 - Các kỹ thuật lập trình MySQL với PHP nâng cao 27
![Page 28: Web301 slide 2](https://reader038.vdocuments.pub/reader038/viewer/2022110310/55954c3c1a28abc4548b469f/html5/thumbnails/28.jpg)
Thực thi lệnh INSERT:
Ví dụ
Bài 2 - Các kỹ thuật lập trình MySQL với PHP nâng cao 28
// Dữ liệu mẫu$category_id = 2;$code = 'hofner';$name = 'Hofner Icon';$price = 499.99;// Thực thi câu lệnh SQL$query = "INSERT INTO products(categoryID, productCode, productName, listPrice) VALUES($category_id, '$code', '$name', $price)"; $success = $db->query($query);
![Page 29: Web301 slide 2](https://reader038.vdocuments.pub/reader038/viewer/2022110310/55954c3c1a28abc4548b469f/html5/thumbnails/29.jpg)
Ví dụ
Bài 2 - Các kỹ thuật lập trình MySQL với PHP nâng cao 29
// Kiểm tra kết quảif ($success) {$count = $db->affected_rows;echo "<p>$count product(s) were added.</p>";} else {$error_message = $db->error;echo "<p>An error occurred: $error_message</p>";}// Kiểm tra ID của sản phẩm vừa được tự động tạo ra$product_id = $db->insert_id;echo "<p>Generated product ID: $product_id</p>";
![Page 30: Web301 slide 2](https://reader038.vdocuments.pub/reader038/viewer/2022110310/55954c3c1a28abc4548b469f/html5/thumbnails/30.jpg)
Phương thức của lớp mysqli:prepare($sql_statement)
Phương thức của lớp mysqli_stmt:bind_param($fs, $vl [, $v2]...)bind result($vl [, $v2]...)execute()fetch()close ()
Làm việc với câu lệnh SQL dựng sẵn
Bài 2 - Các kỹ thuật lập trình MySQL với PHP nâng cao 30
![Page 31: Web301 slide 2](https://reader038.vdocuments.pub/reader038/viewer/2022110310/55954c3c1a28abc4548b469f/html5/thumbnails/31.jpg)
Thực thi một câu lệnh dựng sẵn trả về một tậpkết quả:
Ví dụ
Bài 2 - Các kỹ thuật lập trình MySQL với PHP nâng cao 31
$category_id = 2;$query = "SELECT productCode, productName, listPriceFROM products WHERE categoryID = ?";$statement = $db->prspare($query);$statement->bind_param("i", $category_id);$statement->bind_result($code, $name, $listPrice);$statement->execute();
![Page 32: Web301 slide 2](https://reader038.vdocuments.pub/reader038/viewer/2022110310/55954c3c1a28abc4548b469f/html5/thumbnails/32.jpg)
Hiển thị tập kết quả:
Đóng câu lệnh:
Ví dụ
Bài 2 - Các kỹ thuật lập trình MySQL với PHP nâng cao 32
<?php while($statement->fetch()) : ?><tr><tdx?php echo $code; ?></td><tdx?php echo $name; ?x/td><tdx?php echo $listPrice; ?></td></tr><?php endwhile; ?>
$statement->close()
![Page 33: Web301 slide 2](https://reader038.vdocuments.pub/reader038/viewer/2022110310/55954c3c1a28abc4548b469f/html5/thumbnails/33.jpg)
Thực thi câu lệnh SQL dựng sẵn để thay đổi dữliệu:
Ví dụ
Bài 2 - Các kỹ thuật lập trình MySQL với PHP nâng cao 33
$category_id = 2;$code = 'hofner';$name = 'Hofner Icon';$price = 499.99;$query = "INSERT INTO products(categoryID, productCode, productName, listPrice)VALUES(?, ?, ?, ?)";
$statement = $db->prspars($query);$statement->bind_param("issd", $category_id, $code, $name,$price);$success = $statement->execute();
![Page 34: Web301 slide 2](https://reader038.vdocuments.pub/reader038/viewer/2022110310/55954c3c1a28abc4548b469f/html5/thumbnails/34.jpg)
Ví dụ
Bài 2 - Các kỹ thuật lập trình MySQL với PHP nâng cao 34
if ($success) {$count = $db->affected_rows;echo "<p>$count product(s) were added.</p>";} else {$error_message = $db->error;echo "<p>An error occurred: $error_message</p>";}$statement->close();
![Page 35: Web301 slide 2](https://reader038.vdocuments.pub/reader038/viewer/2022110310/55954c3c1a28abc4548b469f/html5/thumbnails/35.jpg)
Câu lệnh kiểu hướng đối tượngvà hướng cấu trúc
Bài 2 - Các kỹ thuật lập trình MySQL với PHP nâng cao 35
$result = $db->query($query);$result = mysqli_query($db, $query);
$error_message = $db->srror;$error_message = mysqlierror($db);
$row = $result->fetch_assoc();$row = mysqli_fetch_assoc($result);
$row_count = $result->num_rows;$row_count = mysqlinumrows($result);
$count = $db->affected_rows;$count = mysqliaffectsdrows($db);
![Page 36: Web301 slide 2](https://reader038.vdocuments.pub/reader038/viewer/2022110310/55954c3c1a28abc4548b469f/html5/thumbnails/36.jpg)
Câu lệnh kiểu hướng đối tượngvà hướng cấu trúc
Bài 2 - Các kỹ thuật lập trình MySQL với PHP nâng cao 36
$result->frees();mysqli_free_result($result);
$statement = $db->prepare($query);$statement = mysqli_prepare($db, $query);
$statement->bind param ("i", $category_id);mysqli_bind_param($statement, "i", $category_id);
$success = $statement->execute();$success = mysqlisxscute($statement);
$db->close();mysqliclose($db);
![Page 37: Web301 slide 2](https://reader038.vdocuments.pub/reader038/viewer/2022110310/55954c3c1a28abc4548b469f/html5/thumbnails/37.jpg)
MySQL cung cấp giao diện lập trình ứng dụng(API) cho biết loại ứng dụng nào có thể làm việcvới MySQLPHP cung cấp ba mở rộng để làm việc với thưviện API của MySQL: mysql, mysqli, PDOKhi sử dụng PDO để thực thi các câu lệnh SQL,bạn có thể lựa chọn ba chế độ bắt và xử lý lỗi.So với câu lệnh SQL động, câu lệnh SQL dựngsẵn giúp tăng hiệu năng và độ bảo mật
Tổng kết bài học
Bài 2 - Các kỹ thuật lập trình MySQL với PHP nâng cao 37