バージョン: v2.3.0
raw
複雑で柔軟なクエリを組み立てるための生の SQL 式を生成します。プレースホルダーによる SQL インジェクション対策や、識別子をクォートするためのショートカット構文も利用できます。
Medoo::raw($query, $map)
query [string]
生の SQL 式。
map [array] (省略可)
プリペアドステートメントに渡すバインド値。
構文
生の 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
プリペアドステートメントと組み合わせる
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