WordPressis päringutega töötades on alati parem päring enne selle käivitamist ette valmistada ; Kui aga juhtute liidestama kolmanda osapoole API-ga või töötate mõne muu SQL-i variandiga (nt Transact-SQL), võivad asjad toimida veidi teisiti.
Kui ainult andmebaasid oleksid tõesti nii korralikud.
Kõige selle TL;DR seisneb selles, et sprintf -i ja LIKE-i käsitlemine T-SQL-is vajab teatud strateegilist käsitlemist. Ja järgmises jaotises olev koodinäidis peaks pakkuma kõike, mida vajate.
sprintf ja LIKE SQL-is
Natuke käsitletava probleemi tausta:
Oletame, et töötate projekti kallal, mille käigus helistate kolmanda osapoole API-le ja nimetatud API kasutab oma andmebaasiga liidestamiseks T-SQL-i.
Lisaks oletame, et soovite hankida kirjeid, millel on päritava stringi segment (teate küll, LIKE, klausel). Hoiatus on see, et te ei saa kasutada WordPressi pakutavat standardset ettevalmistamisfunktsiooni, seega valite sissetuleva teabe desinfitseerimiseks sprintfi .
Kuna sprintf kasutab %sstringe ja kuna te kasutate LIKE – klauslit, mis nõuab ka %, siis kuidas käsitleda mõlema kasutamist?
Siin on näide selle kohta, kuidas see teie jaoks toimida võib.
<?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.
}
Muidugi arvan ma endiselt $nameargumendil teatud tüüpi põgenemise kasutamist, kuid selleks on mitmeid erinevaid viise ja see pole selle postituse mõte.
Lühidalt, eesliide ja järelliide %skoos %%ja siis peaks olema valmis.