Använder sprintf och LIKE i SQL Queries i WordPress
När du arbetar med frågor i WordPress är det alltid bäst att förbereda frågan innan du kör den; men om du råkar ha gränssnitt med ett tredjeparts-API eller arbetar med en annan variant av SQL (som Transact-SQL), kan saker och ting fungera lite annorlunda.
Om bara databaser verkligen vore så snygga.
TL ;DR för allt detta är att hantering av sprintf och LIKE i T-SQL kräver lite strategisk hantering. Och kodexemplet i nästa avsnitt bör ge allt du behöver.
sprintf och LIKE i SQL
Lite bakgrund om problemet:
Säg att du arbetar med ett projekt där du ringer till ett tredjeparts-API och nämnda API använder T-SQL för att gränssnittet med sin databas.
Låt oss vidare säga att du vill hämta poster som har ett segment av strängen som ska frågas (du vet, en LIKE- sats). Varningen är att du inte kan använda standardfunktionen för förberedelse som tillhandahålls av WordPress så du väljer att använda sprintf för att hjälpa till att sanera den inkommande informationen.
Eftersom sprintf använder %sför strängar och eftersom du använder en LIKE- sats som också kräver %, hur hanterar man fallet med att använda båda?
Här är ett exempel på hur det kan fungera för dig:
<?php
/**
* Queries a third-party API using sprintf and a LIKE clause to retrieve the users
* with a last name like the specified argument.
*
* @param string $lastName An unsanitized version of the user's last name.
*/
public function getUserByLastName(string $lastName)
{
// Sanitize the argument as you see fit here.
$query = sprintf("
SELECT FIRST_NAME, LAST_NAME
FROM USERINFO
WHERE LAST_NAME LIKE '%%%s%%'
", $lastName);
// Make a query to the third-party API here.
}
Naturligtvis tror jag fortfarande att använda någon typ av flykt på $nameargumentet men det finns ett antal olika sätt att göra detta och det är bortom poängen med det här inlägget.
Kort sagt, prefix och suffix till %smed %%och du borde vara bra att gå.