VI Tiếng Việt
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)

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