Ở bài trước cho thấy một ví dụ thao tác trên cơ sở dữ liệu. Tuy nhiên chắc nhiều người vẫn chưa hiểu tại sao có những câu lênh đấy và nó như thế nào? tại sao? cú pháp như vậy?
Bài này chúng ta sẽ đi tìm hiểu chi tiết hơn về các thao tác này
Thực hiện Query
Có 2 cách để thực hiện Query . Cách đơn giản nhất là sử dụng Database_query thông qua DB::query để tạo query. Các query sẽ được gỏi theo cú pháp chuẩn và có thể cho phép chúng ta chọn tham số để tự động thoát. Cách thứ 2 là dùng những phương thức đã được xây dựng sẳn . thường được gooi5 là query buider
Chú ý tất cả các query khi chạy thì phải sử dụng phương thức execute nó chấp nhận như một đổi tượng Database hay tên một thực thể
1. Cách dùng các câu lênh SQL chuẩn
Sử dụng cách chuẩn này cho phép viết câu lệnh SQL như đã biết tuy vẫn có thể thoát các giá trị quert tự động để ngăn cản SQL injection. Ví dụ
// Tương đương với việc truy vấn những user có tên user
$query = DB::query(Database::SELECT, 'SELECT * FROM users WHERE username = :user');
phương thức DB::query thường được dùng để tạo CSDL ban đầu cho phép sử dụng các lệnh dây chuyền. Ở ví dụ trên có sử dụng tham số :user chúng ta sẽ tìm hiểu tiếp sau đây
Cú pháp chuẩn của DB::query là :
DB::query(Database::tên câu lệnh SQL, 'câu lệnh SQL tương ứng');
tên câu lệnh SQL gồm có
Database::SELECT :(câu lệnh select),
Database::INSERT :(câu lệnh thêm),
Database::UPDATE : Câu lệnh cập nhật, or
Database::DELETE : câu lệnh xóa
tất cả sẽ được kiểm tra thông qua phương thức execute() .
Tiếp theo chúng ta tìm hiểu về tham số Database_Query::param. Cách này cho chúng ta dễ quản hơn và hệ thống kiểm tra để ngăn cản SQL injection.
Parameters
Ví dụ trước có sử dụng tham số :user. ở đây sẽ sử dụng Database_Query::param như sau:
$query->param(':user', 'john');
Tên của tham số nên duy nhất ở đây chúng ta cố gắng không sử dụng dấu $ giống như biến bên trong của PHP để tránh nhầm lẫn. Dấu hai chấm (:) được sử dụng ở đây thường xuyên đấy nhé.
Bạn có thể gọi cập nhật tham số :user bằng những lệnh như bình thường như sau
$query->param(':user', $_GET['search']);
Nếu muốn có nhiều tham số thì vẫn số thể sữ dụng Database_Query::parameters. Vú dụ
$query = DB::query(Database::SELECT, 'SELECT * FROM users WHERE username = :user AND status = :status');
và tham số sẽ để trong mảng như sau
$query->parameters(array(
':user' => 'john',
':status' => 'active',
));
Có thể sử dụng kết hợp thuộc tính vào trong biến luôn như sau
$query = DB::query(Database::INSERT, 'INSERT INTO users (username, password) VALUES (:user, :pass)')
->bind(':user', $username)
->bind(':pass', $password);
foreach ($new_users as $username => $password)
{
$query->execute();
}
ở ví dụ trên , biến $username và $password được thay đổi theo vòng lặp. khi tham số thay đổi, nó thay đổi luôn cả tham số :user và :pass . kết hợp tham số cẩn thận để có thể tiết kiệm được nhiều code khi viết .
hiện truy vấn dạng thô
Chuyển kết qua từ object sang string
echo Kohana::debug((string) $query);
// Should display:
// SELECT * FROM users WHERE username = 'john'
để thực hiên thì dùng phương thức execute() và nhận kết quả .
$result = $query->execute();
Nếu muốn sử dụng những cấu hình CSDL khác nhau thì dùng lệnh
$result = $query->execute('config_name');
(còn tiếp)