Phiên bản: v2.3.0
raw
Tạo biểu thức Raw SQL để xây dựng các truy vấn phức tạp và linh hoạt hơn. Biểu thức này cũng hỗ trợ tham số giữ chỗ nhằm giảm nguy cơ SQL injection, cùng cú pháp rút gọn để bao định danh.
Medoo::raw($query, $map)
query [string]
Biểu thức Raw SQL.
map [array] (tùy chọn)
Các giá trị tham số đầu vào cho câu lệnh chuẩn bị sẵn.
Cú pháp
Biểu thức Raw SQL cung cấp cách viết gọn để bao định danh trong câu lệnh SQL. Dùng
<name> để đánh dấu một cột hoặc cột kèm tên bảng, Medoo sẽ tự động thêm phần trích dẫn cần thiết.
Medoo::raw("AVG(<weight>)")
Dùng trong phần khai báo cột
Bạn có thể dùng đối tượng Raw trong phần khai báo cột của
select() hoặc get(). Khóa của mảng sẽ trở thành bí danh trong kết quả.$data = $database->get('account', [
'user_name',
'score' => Medoo::raw('SUM(<age> + <experience>)')
], [
'user_id' => 100
]);
SELECT "user_name", SUM("age" + "experience") AS "score"
FROM "WP_account"
WHERE "user_id" = 100
Dùng trong câu lệnh UPDATE và INSERT
Đối tượng Raw cũng có thể được dùng làm giá trị cột trong
insert() và update().$data = $database->insert('account', [
'user_name' => 'apple',
'user_id' => Medoo::raw('UUID()')
]);
$data = $database->update('account', [
'user_name' => 'apple',
'user_id' => Medoo::raw('UUID()')
], [
'age[>]' => 10
]);
Dùng trong mệnh đề WHERE
Đối tượng Raw có thể được dùng trong mảng
$where để viết các biểu thức điều kiện phức tạp hơn.$data = $database->select('account', [
'user_name',
'user_id',
], [
'datetime[>=]' => Medoo::raw('DATE_SUB(NOW(), INTERVAL 1 DAY)'),
'ORDER' => Medoo::raw('RAND()'),
'LIMIT' => 10
]);
SELECT "user_name", "user_id" FROM "account" WHERE "datetime" >= DATE_SUB(NOW(), INTERVAL 1 DAY) ORDER BY RAND() LIMIT 10
Kết hợp với câu lệnh chuẩn bị sẵn
Nếu biểu thức Raw chứa giá trị lấy từ biến hoặc dữ liệu người dùng, hãy dùng tham số giữ chỗ trong câu lệnh chuẩn bị sẵn để tránh nguy cơ SQL injection.
$today = "2017-05-01";
$database->select('account', [
'user_id',
'user_name'
], [
'datetime' => Medoo::raw('DATE_ADD(:today, INTERVAL 10 DAY)', [
':today' => $today
])
]);
Dùng như toàn bộ mệnh đề WHERE
Bạn cũng có thể dùng đối tượng Raw như một mệnh đề WHERE hoàn chỉnh để xây dựng các điều kiện lọc nâng cao.
$data = $database->select('account', [
'user_id',
'email'
],
Medoo::raw('WHERE
LENGTH(<user_name>) > 5
ORDER BY RAND()
LIMIT 10
')
);
SELECT "user_id", "email"
FROM "account"
WHERE LENGTH("user_name") > 5
ORDER BY RAND()
LIMIT 10