{"id":230590,"date":"2022-11-29T12:38:00","date_gmt":"2022-11-29T09:38:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230590"},"modified":"2022-11-09T23:05:56","modified_gmt":"2022-11-09T20:05:56","slug":"sprintf-n-ja-like-n-kaeyttoe-sql-kyselyissae-wordpressissae","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/sprintf-n-ja-like-n-kaeyttoe-sql-kyselyissae-wordpressissae\/","title":{"rendered":"Sprintf:n ja LIKE:n k\u00e4ytt\u00f6 SQL-kyselyiss\u00e4 WordPressiss\u00e4"},"content":{"rendered":"<p>Kun ty\u00f6skentelet kyselyjen kanssa WordPressiss\u00e4, on aina parasta <a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wpdb\/prepare\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">valmistella<\/a> kysely ennen sen suorittamista. Jos kuitenkin satut olemaan yhteydess\u00e4 kolmannen osapuolen sovellusliittym\u00e4\u00e4n tai ty\u00f6skentelet toisen SQL-version (kuten Transact-SQL:n) kanssa, asiat voivat toimia hieman eri tavalla.<\/p>\n<p>Kunpa tietokannat olisivat todella n\u00e4in siistej\u00e4.<\/p>\n<p>Kaiken t\u00e4m\u00e4n <strong>TL;DR<\/strong> on, ett\u00e4 <a href=\"https:\/\/php.net\/manual\/en\/function.sprintf.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">sprintf<\/a> :n ja <strong><a href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/t-sql\/language-elements\/like-transact-sql?view=sql-server-2017\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">LIKE:n k\u00e4sittely T-SQL:ss\u00e4<\/a><\/strong> vaatii strategista k\u00e4sittely\u00e4. Ja seuraavan osan koodin\u00e4ytteen pit\u00e4isi tarjota kaikki tarvitsemasi.<\/p>\n<h2>sprintf ja LIKE SQL:ss\u00e4<\/h2>\n<p>V\u00e4h\u00e4n taustaa k\u00e4sill\u00e4 olevasta ongelmasta:<\/p>\n<p>Oletetaan, ett\u00e4 ty\u00f6skentelet projektin parissa, jossa soitat puheluita kolmannen osapuolen API:lle ja mainittu API k\u00e4ytt\u00e4\u00e4 T-SQL:\u00e4\u00e4 liitty\u00e4kseen tietokantaansa.<\/p>\n<p>Oletetaan lis\u00e4ksi, ett\u00e4 haluat noutaa tietueita, joissa on segmentti kyselyss\u00e4 olevasta merkkijonosta (tied\u00e4th\u00e4n, <strong>LIKE<\/strong>, lauseke). Varoitus on, ett\u00e4 et voi k\u00e4ytt\u00e4\u00e4 WordPressin tarjoamaa tavallista <strong>valmistelutoimintoa<\/strong>, joten p\u00e4\u00e4t\u00e4t k\u00e4ytt\u00e4\u00e4 <strong>sprintf<\/strong> -toimintoa saapuvien tietojen puhdistamiseen.<\/p>\n<p>Koska <strong>sprintf<\/strong> k\u00e4ytt\u00e4\u00e4 <code>%s<\/code>merkkijonoja ja koska k\u00e4yt\u00e4t <strong>LIKE<\/strong> &#8211; lausetta, joka edellytt\u00e4\u00e4 my\u00f6s <code>%<\/code>, miten k\u00e4sitell\u00e4 molempien k\u00e4ytt\u00f6\u00e4?<\/p>\n<p><strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/b4d5a391024b151667fe99f5bd913544#file-00-get-user-by-last-name-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">T\u00e4ss\u00e4 on esimerkki<\/a><\/strong> siit\u00e4, kuinka se voi toimia sinulle:<\/p>\n<pre><code>&lt;?php\n\/**\n * Queries a third-party API using sprintf and a LIKE clause to retrieve the users \n * with a last name like the specified argument.\n * \n * @param string $lastName An unsanitized version of the user's last name.\n *\/\npublic function getUserByLastName(string $lastName)\n{\n    \/\/ Sanitize the argument as you see fit here.\n\n    $query = sprintf(\"\n        SELECT FIRST_NAME, LAST_NAME\n        FROM USERINFO\n        WHERE LAST_NAME LIKE '%%%s%%'\n    \", $lastName);\n\n    \/\/ Make a query to the third-party API here.\n}\n<\/code><\/pre>\n<p>Tietenkin olen edelleen sit\u00e4 mielt\u00e4, ett\u00e4 k\u00e4yt\u00e4n jonkinlaista paeta <code>$name<\/code>argumentissa, mutta on olemassa useita erilaisia \u200b\u200btapoja tehd\u00e4 t\u00e4m\u00e4, ja se ei ole t\u00e4m\u00e4n viestin tarkoitus.<\/p>\n<p>Lyhyesti sanottuna, etuliite ja p\u00e4\u00e4te <code>%s<\/code>kanssa <code>%%<\/code>ja sinun pit\u00e4isi olla hyv\u00e4 menn\u00e4.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Sprintf:n ja LIKE:n k\u00e4sittely T-SQL:ss\u00e4 vaatii strategista k\u00e4sittely\u00e4 ja n\u00e4in se tehd\u00e4\u00e4n.<\/p>\n","protected":false},"author":1,"featured_media":163659,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[719,843,864],"tags":[1166],"class_list":["post-230590","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kehittaejae","category-opetusohjelmia","category-wordpress-5","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/230590","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/comments?post=230590"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/230590\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/163659"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=230590"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=230590"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=230590"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}