Использование sprintf и LIKE в SQL-запросах в WordPress
При работе с запросами в WordPress всегда лучше подготовить запрос перед его выполнением; однако, если вы взаимодействуете со сторонним API или работаете с другим вариантом SQL (например, Transact-SQL), все может работать немного по-другому.
Если бы только базы данных были такими аккуратными.
TL ;DR всего этого заключается в том, что обработка sprintf и LIKE в T-SQL требует некоторой стратегической обработки. И пример кода в следующем разделе должен предоставить все, что вам нужно.
sprintf и LIKE в SQL
Некоторая предыстория проблемы:
Допустим, вы работаете над проектом, в котором вы делаете вызовы к стороннему API, и указанный API использует T-SQL для взаимодействия со своей базой данных.
Кроме того, предположим, что вы хотите получить записи, содержащие сегмент запрашиваемой строки (вы знаете, предложение LIKE ). Предупреждение заключается в том, что вы не можете использовать стандартную функцию подготовки, предоставляемую WordPress, поэтому вы предпочитаете использовать sprintf для очистки входящей информации.
Поскольку sprintf использует %sдля строк и поскольку вы используете предложение LIKE, которое также требует %, как поступить в случае использования обоих?
Вот пример того, как это может работать для вас:
<?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.
}
Конечно, я все еще думаю об использовании какого-то типа побега в $nameаргументе, но есть несколько разных способов сделать это, и это выходит за рамки этого поста.
Короче говоря, добавьте префикс и суффикс %swith %%, и все будет готово.