{"id":229912,"date":"2022-11-29T12:24:00","date_gmt":"2022-11-29T09:24:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229912"},"modified":"2022-11-09T19:15:44","modified_gmt":"2022-11-09T16:15:44","slug":"korzystanie-ze-sprintf-i-like-w-zapytaniach-sql-w-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/korzystanie-ze-sprintf-i-like-w-zapytaniach-sql-w-wordpress\/","title":{"rendered":"Korzystanie ze sprintf i LIKE w zapytaniach SQL w WordPress"},"content":{"rendered":"<p>Podczas pracy z zapytaniami w WordPress zawsze najlepiej jest <a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wpdb\/prepare\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">przygotowa\u0107<\/a> zapytanie przed jego uruchomieniem; je\u015bli jednak \u0142\u0105czysz si\u0119 z interfejsem API innej firmy lub pracujesz z innym wariantem SQL (takim jak Transact-SQL), mo\u017ce to wygl\u0105da\u0107 nieco inaczej.<\/p>\n<p>Gdyby tylko bazy danych by\u0142y naprawd\u0119 takie zgrabne.<\/p>\n<p><strong>TL;DR<\/strong> tego wszystkiego polega na tym, \u017ce obs\u0142uga <a href=\"https:\/\/php.net\/manual\/en\/function.sprintf.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">sprintf<\/a> i <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 w T-SQL<\/a><\/strong> wymaga pewnej strategicznej obs\u0142ugi. A przyk\u0142adowy kod w nast\u0119pnej sekcji powinien zawiera\u0107 wszystko, czego potrzebujesz.<\/p>\n<h2>sprintf i LIKE w SQL<\/h2>\n<p>Troch\u0119 t\u0142a problemu:<\/p>\n<p>Za\u0142\u00f3\u017cmy, \u017ce pracujesz nad projektem, w kt\u00f3rym wywo\u0142ujesz API innej firmy, a wspomniane API u\u017cywa T-SQL do \u0142\u0105czenia si\u0119 ze swoj\u0105 baz\u0105 danych.<\/p>\n<p>Co wi\u0119cej, powiedzmy, \u017ce chcesz pobra\u0107 rekordy, kt\u00f3re zawieraj\u0105 segment \u0142a\u0144cucha, kt\u00f3ry ma by\u0107 odpytywany (no wiesz, klauzula <strong>LIKE ).<\/strong> Zastrze\u017cenie polega na tym, \u017ce nie mo\u017cesz u\u017cy\u0107 standardowej funkcji <strong>przygotowania<\/strong> dostarczanej przez WordPress, wi\u0119c decydujesz si\u0119 na u\u017cycie <strong>sprintf<\/strong>, aby pom\u00f3c w oczyszczeniu przychodz\u0105cych informacji.<\/p>\n<p>Poniewa\u017c <strong>sprintf<\/strong> u\u017cywa <code>%s<\/code>dla string\u00f3w i poniewa\u017c u\u017cywasz klauzuli <strong>LIKE<\/strong><code>%<\/code>, kt\u00f3ra r\u00f3wnie\u017c wymaga, jak radzi\u0107 sobie z przypadkiem u\u017cycia obu?<\/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\">Oto przyk\u0142ad<\/a><\/strong>, jak to mo\u017ce dzia\u0142a\u0107 w Twoim przypadku:<\/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>Oczywi\u015bcie nadal my\u015bl\u0119 o u\u017cyciu jakiego\u015b rodzaju ucieczki w <code>$name<\/code>k\u0142\u00f3tni, ale jest wiele r\u00f3\u017cnych sposob\u00f3w na zrobienie tego i jest to poza celem tego postu.<\/p>\n<p>Kr\u00f3tko m\u00f3wi\u0105c, prefiks i sufiks <code>%s<\/code>z <code>%%<\/code>i powiniene\u015b by\u0107 gotowy.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Obs\u0142uga sprintf i LIKE w T-SQL wymaga pewnej strategicznej obs\u0142ugi i tak to zrobi\u0107.<\/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":[721,845,866],"tags":[1169],"class_list":["post-229912","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-samouczki","category-wordpress-7","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/229912","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/comments?post=229912"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/229912\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/163659"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=229912"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=229912"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=229912"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}