Podczas pracy z zapytaniami w WordPress zawsze najlepiej jest przygotować zapytanie przed jego uruchomieniem; jeśli jednak łączysz się z interfejsem API innej firmy lub pracujesz z innym wariantem SQL (takim jak Transact-SQL), może to wyglądać nieco inaczej.
Gdyby tylko bazy danych były naprawdę takie zgrabne.
TL;DR tego wszystkiego polega na tym, że obsługa sprintf i LIKE w T-SQL wymaga pewnej strategicznej obsługi. A przykładowy kod w następnej sekcji powinien zawierać wszystko, czego potrzebujesz.
sprintf i LIKE w SQL
Trochę tła problemu:
Załóżmy, że pracujesz nad projektem, w którym wywołujesz API innej firmy, a wspomniane API używa T-SQL do łączenia się ze swoją bazą danych.
Co więcej, powiedzmy, że chcesz pobrać rekordy, które zawierają segment łańcucha, który ma być odpytywany (no wiesz, klauzula LIKE ). Zastrzeżenie polega na tym, że nie możesz użyć standardowej funkcji przygotowania dostarczanej przez WordPress, więc decydujesz się na użycie sprintf, aby pomóc w oczyszczeniu przychodzących informacji.
Ponieważ sprintf używa %sdla stringów i ponieważ używasz klauzuli LIKE%, która również wymaga, jak radzić sobie z przypadkiem użycia obu?
Oto przykład, jak to może działać w Twoim przypadku:
<?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.
}
Oczywiście nadal myślę o użyciu jakiegoś rodzaju ucieczki w $namekłótni, ale jest wiele różnych sposobów na zrobienie tego i jest to poza celem tego postu.
Krótko mówiąc, prefiks i sufiks %sz %%i powinieneś być gotowy.