[Zend] Cơ bản về Zend_Db

Zend_Db là một lớp rất quan trọng trong Zend Framework. Nó giúp chúng ta thao tác với CSDL một cách dễ dàng và linh hoạt. Zend_Db bao gồm nhiều lớp khác nhau như Zend_Db, Zend_Db_Select, Zend_Db_Table … Ngoài ra nó giúp chúng ta có thể kết nối với nhiều hệ CSDL khác nhau…

    CREATE TABLE IF NOT EXISTS `groups` (
      `group_id` varchar(4) NOT NULL,
      `group_name` varchar(150) NOT NULL,
      `group_status` tinyint(1) NOT NULL,
      PRIMARY KEY (`group_id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

    INSERT INTO `groups` (`group_id`, `group_name`, `group_status`) VALUES
    ('g001', 'administrator', 1),
    ('g003', 'member', 1),
    ('g002', 'Manager', 1);

    CREATE TABLE IF NOT EXISTS `members` (
      `member_id` mediumint(7) unsigned NOT NULL AUTO_INCREMENT,
      `member_name` varchar(50) NOT NULL,
      `user_name` varchar(32) NOT NULL,
      `email` varchar(20) DEFAULT NULL,
      `password` varchar(32) NOT NULL,
      `register_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      `lasted_date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
      `member_status` tinyint(1) NOT NULL,
      `group_id` varchar(4) NOT NULL,
      PRIMARY KEY (`member_id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=13 ;

    INSERT INTO `members` (`member_id`, `member_name`, `user_name`, `email`, `password`, `register_date`, `lasted_date`, `member_status`, `group_id`) VALUES
    (4, 'Tom Nguyen', 'tomnguyen', 'tomnguyen@yahoo.com', 'e10adc3949ba59abbe56e057f20f883e', '2009-11-24 02:07:41', '0000-00-00 00:00:00', 1, 'g001'),
    (2, 'Nguyen Van A', 'meoden', 'meoden@yahoo.com', 'e10adc3949ba59abbe56e057f20f883e', '2009-11-24 02:06:19', '0000-00-00 00:00:00', 1, 'g003'),
    (3, 'NguyenThi Van', 'vannguyen', 'vannguyen@yahoo.com', 'e10adc3949ba59abbe56e057f20f883e', '2009-11-24 02:06:55', '0000-00-00 00:00:00', 1, 'g003'),
    (5, 'An Tran', 'antran', 'antran@yahoo.com', 'e10adc3949ba59abbe56e057f20f883e', '2009-11-24 02:08:55', '0000-00-00 00:00:00', 1, 'g001'),
    (6, 'Nguyen Phong', 'phongnguyen', 'phongnguyen@yahoo.co', 'e10adc3949ba59abbe56e057f20f883e', '2009-11-24 02:09:22', '0000-00-00 00:00:00', 1, 'g001'),
    (7, 'Nguyen Ha Phuong', 'haphuong', 'haphuong@yahoo.com', 'e10adc3949ba59abbe56e057f20f883e', '2009-11-24 02:10:10', '0000-00-00 00:00:00', 1, 'g002'),
    (8, 'Nguyen Ngoc Van', 'ngocvan', 'ngocvan@yahoo.com', 'e10adc3949ba59abbe56e057f20f883e', '2009-11-24 02:10:35', '0000-00-00 00:00:00', 1, 'g002'),
    (9, 'Nguyen Huy Hiep', 'huyhiep', 'huyhiep@yahoo.com', 'e10adc3949ba59abbe56e057f20f883e', '2009-11-24 02:11:15', '0000-00-00 00:00:00', 1, 'g002'),
    (10, 'Nguyen Huy Toan', 'huytoan', 'huytoan@yahoo.com', 'e10adc3949ba59abbe56e057f20f883e', '2009-11-24 02:11:56', '0000-00-00 00:00:00', 1, 'g003'),
    (11, 'Bui Tien Duc', 'ducbui', 'ducbui@yahoo.com', 'e10adc3949ba59abbe56e057f20f883e', '2009-11-24 02:20:45', '0000-00-00 00:00:00', 1, 'g003'),
    (12, 'Pham Tien Thinh', 'tienthinh', 'tienthinh@yahoo.com', 'e10adc3949ba59abbe56e057f20f883e', '2009-11-24 02:21:08', '0000-00-00 00:00:00', 1, 'g003');

1.Khởi tạo Zend_Db

$db = Zend_Db::factory('Pdo_Mysql', array ('host' => 'localhost',
                            'username' => 'root',
                            'password' => '',
                            'dbname' => 'company_2'));

2. setFetchMode ($constant)

FETCH_OBJ: Trả kết quả truy vấn thành các đối tượng

FETCH_ASSOC: Trả kết quả truy vấn thành những mảng liên tục, giữ nguyên tên của field

FETCH_NUM: Trả kết quả truy vấn thành mảng, tên field sẽ được chuyển thành số liên tục

FETCH_BOTH: Trả kết quả truy vấn thành mảng, mảng bao gồm kết quả của 2 kiểu FETCH_ASSOC và FETCH_NUM

Ví dụ 2.1: Chuyển kết quả truy vấn thành một mảng chứa các tên field

$db = Zend_Db::factory('Pdo_Mysql', array ('host' => 'localhost',
                            'username' => 'root',
                            'password' => '',
                            'dbname' => 'company_2'));
$db->setFetchMode(Zend_Db::FETCH_OBJ);

3. fetchAll($sql,$bind)

Phương thức fetchAll là phương thức để lấy dữ liệu trong CSDL. Nó tương tự như câu lệnh Select của MySQL

Tham số:

$sql: Câu lệnh truy vấn

$bind: Mảng giá trị truyền vào khi truy vấn

Ví dụ 3.1: Liệt kê những thành viên có group_id = g002 và có member_status = 1

MySQL query

$sql = "SELECT member_id, member_name, user_name 
         FROM members
          WHERE group_id = 'g002'   
          AND member_status = 1";
mysql_query($sql);

 

Zend_Db

$sql = "SELECT member_id, member_name, user_name 
        FROM members
        WHERE group_id = 'g002'   
        AND member_status = 1";
$db->fetchAll($sql);

Ví dụ 3.2: Liệt kê những thành viên có group_id = g002 và có member_status = 1 (truyền tham số)

MySQL query

$group_id = 'g002';
$member_status = 1;
$sql = "SELECT member_id, member_name, user_name 
         FROM members
          WHERE group_id = '" . $group_id . "'
          AND member_status = " . $member_status;
mysql_query($sql);

 

Zend_Db

$sql = "SELECT member_id, member_name, user_name 
        FROM members
        WHERE group_id = ?    
        AND member_status = ?";
$db->fetchAll($sql,array('g002',1));

4. fetchAssoc ($sql,$bind)

Phương thức fetchAssoc tương tự như fetchAll là phương thức để lấy dữ liệu trong CSDL nhưng nó sẽ trả về một mảng dữ liệu cho dù setFetchMode() ở chế độ nào đi nữa

Tham số:

$sql: Câu lệnh truy vấn

$bind: Mảng giá trị truyền vào khi truy vấn

Ví dụ 4.1: Liệt kê những thành viên có group_id = g002 và có member_status = 1 (truyền tham số)

$db->setFetchMode(Zend_Db::FETCH_OBJ);
$sql = "SELECT member_id, member_name, user_name 
        FROM members
        WHERE group_id = ?    
        AND member_status = ?";
$db->fetchAssoc($sql,array('g002',1));

5. fetchCol ($sql,$bind)

Phương thức fetchCol là phương thức để lấy dữ liệu trong CSDL nhưng nó chỉ trả về giá trị của field đầu tiên trong kết quả truy vấn

Tham số:

$sql: Câu lệnh truy vấn

$bind: Mảng giá trị truyền vào khi truy vấn

Ví dụ 5.1: Liệt kê mã thành viên có group_id = g002 và có member_status = 1 (truyền tham số)

$sql = "SELECT *  
        FROM members
        WHERE group_id = ? 
        AND member_status = ?";
$db-> fetchCol($sql,array('g002',1));

6. fetchPairs($sql,$bind)

Phương thức fetchPairs giống phương thức fetchCol để lấy dữ liệu trong CSDL nhưng nó chỉ trả về giá trị của field thứ 2 trong kết quả truy vấn

Tham số:

$sql: Câu lệnh truy vấn

$bind: Mảng giá trị truyền vào khi truy vấn

Ví dụ 6.1: Liệt kê mã thành viên có group_id = g002 và có member_status = 1 (truyền tham số)

$sql = "SELECT *  
        FROM members
        WHERE group_id = ?   
        AND member_status = ?";
$db-> fetchPairs($sql,array('g002',1));

7. fetchRow($sql,$bind)

Phương thức fetchRow là phương thức để lấy dữ liệu trong CSDL nhưng nó chỉ trả về một dòng dữ liệu duy nhất

Tham số:

$sql: Câu lệnh truy vấn

$bind: Mảng giá trị truyền vào khi truy vấn

Ví dụ 7.1: Liệt kê mã thành viên có group_id = g002 và có member_status = 1 (truyền tham số)

$sql = "SELECT *  
        FROM members
        WHERE group_id = ?    
        AND member_status = ?";
$db-> fetchRow($sql,array('g002',1));

8. fetchOne ($sql,$bind)

Phương thức fetchOne là phương thức để lấy dữ liệu trong CSDL nhưng nó chỉ trả về một giá trị duy nhất

Tham số:

$sql: Câu lệnh truy vấn

$bind: Mảng giá trị truyền vào khi truy vấn

Ví dụ 8.1:

$sql = "SELECT *  
        FROM members
        WHERE group_id = ? 
        AND member_status = ?";
$db-> fetchOne($sql,array('g002',1))

9. insert($table, $bind)

Phương thức insert là phương thức để đưa dữ liệu vào CSDL

Tham số:

$table: tên bảng

$bind: Mảng giá trị đưa vào CSDL

Ví dụ 9.1: Thêm một dòng dữ liệu vào bảng groups

$data = array(
        'group_id'      => 'g004',
        'group_name'     => 'Nghien cuu',
        'group_status'  => 1
        );  
$db->insert('groups', $data);


10. lastInsertId ($table, $primaryKey)

Phương thức lastInsertId là phương thức lấy ID của một record vừa được thêm vào bằng phương thức insert()

Tham số:

$table: tên bảng

$primaryKey: Khóa chính của bảng

Ví dụ 10.1: Thêm một dòng dữ liệu vào bảng members

$data = array(
                'member_name'          => 'Pham Vu Khanh',
                'user_name'         => 'KhanhPham',
                'email'          => 'vukhanh2212@gmail.com',
                'password'          => md5('123456'),
             'register_date'     => date('Y-m-d 00:00:00'),
             'member_status'     => 1,
             'group_id'         => 'g001'
               );     
$db->insert('members', $data);
echo '<br>' . $id = $db->lastInsertId();

11. update($table, $data,$where)

Phương thức update là phương thức để cập nhật dữ liệu vào CSDL

Tham số:

$table: tên bảng

$data: Mảng giá trị đưa vào CSDL

$where: điều kiện để cập nhật

Ví dụ 11.1: Thêm một dòng dữ liệu vào bảng groups

$where = " group_id = 'g004'";
$data = array(                    
            'group_name'     => 'Research',
            'group_status'  => 1
        );    
$db->update('groups', $data, $where);

12. quote($value, $type = null)

Phương thức quote() là phương thức sử để sửa các dấu nháy đơn (‘) thành ( ’) trước khi đưa vào câu truy vấn Select. Hoặc ép kiểu thành dạng số INT hoặc Float. Đây là một phương thức hỗ trợ để trách các lỗ Sql injection nguy hiểm.

Tham số:

$value: tên bảng

$type: Kiểu giá trị của $value (INTEGER – STRING – FLOAT)

Ví dụ 12.1: Tìm thành viên có tên “O’Reilly” trong bảng member

$memberName = $db->quote("O'Reilly",STRING);
// SELECT * FROM members WHERE member_name = 'O'Reilly'
$sql = 'SELECT *  
            FROM members
            WHERE member_name = ' . $memberName;
$result = $db->fetchRow($sql);

Ví dụ 12.2: Tìm thành viên có member_id “3’ ” trong bảng member

$memberID = $db->quote("3' ",INTEGER);
//SELECT * FROM members WHERE member_id = 3
$sql = 'SELECT *  
            FROM members
            WHERE member_id = ' . $memberID;
$result = $db->fetchRow($sql);
FOLLOW US
Comments
  1. tâm

    sư phụ nào viết bài này hay vậy ^^

Leave a Reply

Your email address will not be published. Required fields are marked *