Версія: v2.3.0
raw
Medoo надає Raw SQL-вирази для складних і гнучко налаштовуваних запитів. Ці вирази також підтримують заповнювачі для зменшення ризику SQL-ін’єкції та скорочений синтаксис для цитування ідентифікаторів.
Medoo::raw($query, $map)
query [string]
Raw SQL-вираз.
map [array] (необов’язково)
Значення для прив’язки в підготовленому запиті.
Синтаксис
Raw SQL-вирази дають змогу коротко записувати цитування ідентифікаторів. Використовуйте
<name>, щоб позначити стовпець або стовпець із вказанням таблиці, а Medoo автоматично додасть потрібні лапки.
Medoo::raw("AVG(<weight>)")
Для стовпців
Ви можете використовувати raw-об’єкт у параметрі columns методів
select() або get(). Ключ масиву стане псевдонімом у результаті.$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
Для операторів UPDATE і INSERT
Raw-об’єкти також можна використовувати як значення стовпців у
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
]);
Для умов WHERE
Raw-об’єкти можна використовувати всередині масиву
where для складніших виразів.$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
Із підготовленим запитом
Якщо raw-вирази містять значення зі змінних або користувацького вводу, використовуйте заповнювачі разом із підготовленим запитом, щоб зменшити ризик SQL-ін’єкції.
$today = "2017-05-01";
$database->select('account', [
'user_id',
'user_name'
], [
'datetime' => Medoo::raw('DATE_ADD(:today, INTERVAL 10 DAY)', [
':today' => $today
])
]);
Як повноцінну умову WHERE
Ви також можете використовувати raw-об’єкт як повноцінну умову WHERE для складнішої фільтрації.
$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