Використання 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аргументу, але є кілька різних способів зробити це, і це виходить за межі цієї публікації.
Коротше кажучи, додайте префікс і суфікс %sз %%, і все буде готово.