Usando sprintf e LIKE em consultas SQL no WordPress
Ao trabalhar com consultas no WordPress, é sempre melhor preparar a consulta antes de executá-la; no entanto, se você estiver fazendo interface com uma API de terceiros ou trabalhando com outra variante do SQL (como Transact-SQL), as coisas podem funcionar de maneira um pouco diferente.
Se apenas os bancos de dados fossem realmente tão legais.
O TL;DR de tudo isso é que lidar com sprintf e LIKE em T-SQL precisa de algum tratamento estratégico. E o exemplo de código na próxima seção deve fornecer tudo o que você precisa.
sprintf e LIKE no SQL
Alguns antecedentes sobre o problema em questão:
Digamos que você esteja trabalhando em um projeto no qual está fazendo chamadas para uma API de terceiros e a referida API usa T-SQL para fazer interface com seu banco de dados.
Além disso, digamos que você queira recuperar registros que tenham um segmento da string a ser consultada (você sabe, uma cláusula LIKE ). A ressalva é que você não pode usar a função de preparação padrão fornecida pelo WordPress, então opte por usar sprintf para ajudar a limpar as informações recebidas.
Como o sprintf usa %sstrings e você está usando uma cláusula LIKE% que também requer, como lidar com o caso de usar ambos?
Aqui está um exemplo de como isso pode funcionar para você:
<?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.
}
Claro, eu ainda acho que usar algum tipo de escape no $nameargumento, mas existem várias maneiras diferentes de fazer isso e está além do objetivo deste post.
Em suma, prefixe e sufixo o %scom %%e você deve estar pronto para ir.