버전: v2.3.0
raw
복잡하고 유연한 쿼리를 작성할 수 있도록 Raw SQL 표현식을 생성합니다. 플레이스홀더로 SQL 인젝션 위험을 줄일 수 있고, 식별자를 인용하는 축약 구문도 지원합니다.
Medoo::raw($query, $map)
query [string]
Raw 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
프리페어드 스테이트먼트와 함께 사용하기
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