{"id":230004,"date":"2022-11-29T12:30:00","date_gmt":"2022-11-29T09:30:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230004"},"modified":"2022-11-09T19:39:53","modified_gmt":"2022-11-09T16:39:53","slug":"sprintf-ja-like-kasutamine-sql-paeringutes-wordpressis","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/sprintf-ja-like-kasutamine-sql-paeringutes-wordpressis\/","title":{"rendered":"Sprintf ja LIKE kasutamine SQL p\u00e4ringutes WordPressis"},"content":{"rendered":"<p>WordPressis p\u00e4ringutega t\u00f6\u00f6tades on alati parem p\u00e4ring enne selle k\u00e4ivitamist <a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wpdb\/prepare\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ette valmistada ;<\/a> Kui aga juhtute liidestama kolmanda osapoole API-ga v\u00f5i t\u00f6\u00f6tate m\u00f5ne muu SQL-i variandiga (nt Transact-SQL), v\u00f5ivad asjad toimida veidi teisiti.<\/p>\n<p>Kui ainult andmebaasid oleksid t\u00f5esti nii korralikud.<\/p>\n<p>K\u00f5ige selle <strong>TL;DR<\/strong> seisneb selles, et <a href=\"https:\/\/php.net\/manual\/en\/function.sprintf.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">sprintf<\/a> -i 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-i k\u00e4sitlemine T-SQL-is<\/a><\/strong> vajab teatud strateegilist k\u00e4sitlemist. Ja j\u00e4rgmises jaotises olev koodin\u00e4idis peaks pakkuma k\u00f5ike, mida vajate.<\/p>\n<h2>sprintf ja LIKE SQL-is<\/h2>\n<p>Natuke k\u00e4sitletava probleemi tausta:<\/p>\n<p>Oletame, et t\u00f6\u00f6tate projekti kallal, mille k\u00e4igus helistate kolmanda osapoole API-le ja nimetatud API kasutab oma andmebaasiga liidestamiseks T-SQL-i.<\/p>\n<p>Lisaks oletame, et soovite hankida kirjeid, millel on p\u00e4ritava stringi segment (teate k\u00fcll, <strong>LIKE<\/strong>, klausel). Hoiatus on see, et te ei saa kasutada WordPressi pakutavat standardset <strong>ettevalmistamisfunktsiooni<\/strong>, seega valite sissetuleva teabe desinfitseerimiseks <strong>sprintfi .<\/strong><\/p>\n<p>Kuna <strong>sprintf<\/strong> kasutab <code>%s<\/code>stringe ja kuna te kasutate <strong>LIKE<\/strong> &#8211; klauslit, mis n\u00f5uab ka <code>%<\/code>, siis kuidas k\u00e4sitleda m\u00f5lema kasutamist?<\/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\">Siin on n\u00e4ide<\/a><\/strong> selle kohta, kuidas see teie jaoks toimida v\u00f5ib.<\/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>Muidugi arvan ma endiselt <code>$name<\/code>argumendil teatud t\u00fc\u00fcpi p\u00f5genemise kasutamist, kuid selleks on mitmeid erinevaid viise ja see pole selle postituse m\u00f5te.<\/p>\n<p>L\u00fchidalt, eesliide ja j\u00e4relliide <code>%s<\/code>koos <code>%%<\/code>ja siis peaks olema valmis.<\/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-i ja LIKE-i k\u00e4sitlemine T-SQL-is vajab strateegilist k\u00e4sitlemist ja see on viis, kuidas seda teha.<\/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":[718,842,863],"tags":[1165],"class_list":["post-230004","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arendaja","category-opetused","category-wordpress-4","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/230004","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/comments?post=230004"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/230004\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/163659"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=230004"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=230004"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=230004"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}