版本: v2.3.0
raw
Medoo 提供適用於複雜、高度可自訂查詢的原生 SQL 表達式,並支援佔位符與識別字引用的簡便寫法。
Medoo::raw($query, $map)
query [string]
原生 SQL 表達式。
map [array] (可選)
預備語句的綁定參數值。
語法
raw() 可讓你直接撰寫原生 SQL 表達式,並簡化識別字的引用處理。使用 <name> 標記欄位名稱(或帶資料表前綴的欄位名稱)後,Medoo 會自動補上對應的引用。
Medoo::raw("AVG(<weight>)")
用於查詢欄位
您可以在
select() 或 get() 的欄位參數中使用 raw() 物件。陣列鍵會成為結果中的別名。$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
搭配預備語句
如果原生表達式中包含變數值或使用者輸入,請使用預備語句的佔位符來避免 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