เวอร์ชัน: v2.3.0
raw
Medoo มีออบเจ็กต์ Raw สำหรับเขียนคิวรีที่ซับซ้อนและปรับแต่งได้มากขึ้น รองรับตัวแทนค่าเพื่อลดความเสี่ยงจากการโจมตีแบบ SQL injection และมีไวยากรณ์ย่อสำหรับใส่เครื่องหมายอัญประกาศให้ตัวระบุ
Medoo::raw($query, $map)
query [string]
นิพจน์ Raw SQL
map [array] (ไม่บังคับ)
ค่าพารามิเตอร์อินพุตสำหรับคำสั่งที่เตรียมไว้
ไวยากรณ์
นิพจน์ Raw SQL รองรับไวยากรณ์ย่อสำหรับการอ้างอิงตัวระบุ ใช้
<name> เพื่อระบุชื่อคอลัมน์หรือคอลัมน์ที่มีชื่อตารางกำกับ แล้ว Medoo จะจัดการการใส่เครื่องหมายอัญประกาศให้โดยอัตโนมัติ
Medoo::raw("AVG(<weight>)")
สำหรับคอลัมน์ที่เลือก
คุณสามารถใช้ออบเจ็กต์ Raw ในพารามิเตอร์คอลัมน์ของ
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 มีค่าจากตัวแปรหรือข้อมูลที่ผู้ใช้ป้อน ควรใช้ตัวแทนค่าร่วมกับคำสั่งที่เตรียมไว้ เพื่อลดความเสี่ยงจากการโจมตีแบบ SQL injection
$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