Sprintf:n ja LIKE:n käyttö SQL-kyselyissä WordPressissä
Kun työskentelet kyselyjen kanssa WordPressissä, on aina parasta valmistella kysely ennen sen suorittamista. Jos kuitenkin satut olemaan yhteydessä kolmannen osapuolen sovellusliittymään tai työskentelet toisen SQL-version (kuten Transact-SQL:n) kanssa, asiat voivat toimia hieman eri tavalla.
Kunpa tietokannat olisivat todella näin siistejä.
Kaiken tämän TL;DR on, että sprintf :n ja LIKE:n käsittely T-SQL:ssä vaatii strategista käsittelyä. Ja seuraavan osan koodinäytteen pitäisi tarjota kaikki tarvitsemasi.
sprintf ja LIKE SQL:ssä
Vähän taustaa käsillä olevasta ongelmasta:
Oletetaan, että työskentelet projektin parissa, jossa soitat puheluita kolmannen osapuolen API:lle ja mainittu API käyttää T-SQL:ää liittyäkseen tietokantaansa.
Oletetaan lisäksi, että haluat noutaa tietueita, joissa on segmentti kyselyssä olevasta merkkijonosta (tiedäthän, LIKE, lauseke). Varoitus on, että et voi käyttää WordPressin tarjoamaa tavallista valmistelutoimintoa, joten päätät käyttää sprintf -toimintoa saapuvien tietojen puhdistamiseen.
Koska sprintf käyttää %smerkkijonoja ja koska käytät LIKE – lausetta, joka edellyttää myös %, miten käsitellä molempien käyttöä?
Tässä on esimerkki siitä, kuinka se voi toimia sinulle:
<?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.
}
Tietenkin olen edelleen sitä mieltä, että käytän jonkinlaista paeta $nameargumentissa, mutta on olemassa useita erilaisia tapoja tehdä tämä, ja se ei ole tämän viestin tarkoitus.
Lyhyesti sanottuna, etuliite ja pääte %skanssa %%ja sinun pitäisi olla hyvä mennä.