Ngu ngơ học làm web (107) - PHP Data Object – prepared statement

Tiếp theo của: Ngu ngơ học làm web (106) - Kết hợp PHP – mySQL –  thư viện PDO (tt)
-----

Phần 107. PHP Data Object – prepared statement


Xem và làm theo clip số 15 của thầy Nguyễn Anh Tuấn:


Đối với lệnh SQL có tham số động, không nên truyền câu lệnh SQL trực tiếp thông qua chuỗi, mà nên sử dụng prepared statement để tránh bị tấn công SQL injection.


Để sử dụng prepared statement, thực hiện các bước sau:

- Tạo câu truy vấn,

$sql = "SELECT ma_mon, ten_mon, noi_dung_tom_tat, don_gia, hinh FROM mon_an";

- Sử dụng hàm prepare() để tạo một prepared statement. Ví dụ,

$stmt = $pdo->prepare($sql);

- Thực thi một prepared statement bằng hàm execute(). Ví dụ,

$stmt->execute();       

- Chuyển kết quả truy vấn từ prepared statement sang một mảng hoặc một mảng các đối tượng.

Ví dụ sau trả về một mảng các đối tượng kiểu stdClass, với tên thuộc tính của đối tượng tương ứng với tên của cột,

if($stmt->rowcount() > 0){
                        $mon_an = $stmt->fetchAll(PDO::FETCH_OBJ);
            }

Lưu lại các đoạn mã để tham khảo.

Đoạn mã của default.css

body { background: #ccc; }
h1 { text-align: center; color: #F00;  }
#main { width: 700px; margin: 0 auto; border: #f00 solid 1px; background: #fff; }
.khung { width: 680px; height: 200px; border-bottom: #999 solid 1px;  padding: 10px; }
.khung img { width: 250px; float: left; margin-right: 10px; }

Đoạn mã của ds_mon_an.php

<!DOCTYPE html>
<html lang="en">
<head>
            <meta charset="UTF-8">
            <title>Danh sách món ăn</title>
            <link rel="stylesheet" href="default.css">
</head>
<?php
            include("connection.php");
            //Tạo câu truy vấn
            $sql = "SELECT ma_mon, ten_mon, noi_dung_tom_tat, don_gia, hinh FROM mon_an";
            //Tạo một prepared statement
            $stmt = $pdo->prepare($sql);
            //Thực thi prepared statement
            $stmt->execute();
            //Chuyển kết quả truy vấn sang một mảng các đối tượng
            if($stmt->rowcount() > 0){
                        $mon_an = $stmt->fetchAll(PDO::FETCH_OBJ);
            }
?>
<body>
<div id="main">
            <h1>Danh sách món ăn</h1>
<?php
            foreach ($mon_an as $item) {
?>
            <div class="khung">
                        <img src="><?php echo $item ->hinh; ?>" alt="Hinh">
                        <h3><?php echo $item ->ten_mon; ?></h3>
                        <?php echo $item ->noi_dung_tom_tat; ?>
                        <p>Đơn giá: <?php echo $item ->don_gia; ?> VNĐ</p>
            </div>
<?php
}
?>
</div>
<?php
            $pdo->NULL;
?>
</body>

</html>
-----------
Cập nhật 16/2/2017
-----------
Xem thêm:
Tổng hợp các bài viết về Ngu ngơ học làm web