[KOHANA] Bài 6 Lệnh thao tác truy vấn cơ sở dữ liêu

Ở 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)