Version: v2.3.0
raw
Medoo fournit des expressions SQL brutes pour les requêtes complexes et hautement personnalisables. Ces expressions prennent également en charge les placeholders pour limiter le risque d’injection SQL, ainsi qu’une syntaxe abrégée pour citer les identifiants.
Medoo::raw($query, $map)
query [string]
L’expression SQL brute.
map [array] (facultatif)
Les valeurs à lier pour les requêtes préparées.
Syntaxe
Les expressions SQL brutes offrent une syntaxe abrégée pour citer les identifiants. Utilisez
<name> pour marquer une colonne (ou une colonne qualifiée par une table), et Medoo appliquera automatiquement les guillemets nécessaires.
Medoo::raw("AVG(<weight>)")
Pour les colonnes
Vous pouvez utiliser un objet Raw dans la sélection des colonnes de
select() ou get(). La clé du tableau devient alors l'alias dans le résultat.$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
Pour les instructions UPDATE et INSERT
Les objets Raw peuvent également être utilisés comme valeurs de colonne dans
insert() et 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
]);
Pour les clauses WHERE
Les objets Raw peuvent être utilisés dans le tableau
where pour écrire des expressions plus avancées.$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
Avec une requête préparée
Si les expressions SQL brutes contiennent des valeurs provenant de variables ou de saisies utilisateur, utilisez des placeholders dans une requête préparée pour éviter l'injection SQL.
$today = "2017-05-01";
$database->select('account', [
'user_id',
'user_name'
], [
'datetime' => Medoo::raw('DATE_ADD(:today, INTERVAL 10 DAY)', [
':today' => $today
])
]);
Comme clause WHERE
Vous pouvez également utiliser un objet Raw comme clause WHERE complète pour un filtrage plus avancé.
$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