{"id":229303,"date":"2022-10-29T19:20:00","date_gmt":"2022-10-29T16:20:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229303"},"modified":"2022-11-09T06:23:50","modified_gmt":"2022-11-09T03:23:50","slug":"suorat-tietokantakyselyt-wordpressissae","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/suorat-tietokantakyselyt-wordpressissae\/","title":{"rendered":"Suorat tietokantakyselyt WordPressiss\u00e4"},"content":{"rendered":"\n<p>Jos olet palannut l\u00e4pi jonkin kirjoittamistani viesteist\u00e4 esimerkiksi kahden viime vuoden aikana, tulet todenn\u00e4k\u00f6isesti huomaamaan, ett\u00e4 k\u00e4yt\u00e4n saatavilla olevia API:ita hakemistotietokantakyselyiden kautta l\u00e4hes joka ikinen kerta.<\/p>\n<p>Ja totuus on, ett\u00e4 kallistun edelleen siihen suuntaan. Eli jos on olemassa abstraktio tai API, joka on k\u00e4ytett\u00e4viss\u00e4 jonkin tietyn tekemiseen, yrit\u00e4n k\u00e4ytt\u00e4\u00e4 sit\u00e4.<\/p>\n<p>Mutta parissa viimeaikaisessa projektissa olen ty\u00f6skennellyt joidenkin suhteellisen suurten tietojoukkojen kanssa (suuret verrattuna ei-yritystason tietojoukkoon). Ja n\u00e4in tehdess\u00e4ni olen yritt\u00e4nyt varmistaa, ett\u00e4 tietojen p\u00e4ivitykset tapahtuvat mahdollisimman nopeasti.<\/p>\n<p>T\u00e4llaisissa tilanteissa, vaikka <a href=\"https:\/\/tommcfarlin.com\/following-the-wordpress-coding-standards\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WordPress<\/a> -koodausstandardit eiv\u00e4t pid\u00e4 siit\u00e4, suorat tietokantakyselyt ovat joskus paras vaihtoehto tietyiss\u00e4 olosuhteissa.<\/p>\n<h2>Suorat tietokantakyselyt<\/h2>\n<p>Suorat tietokantakyselyt ovat yksi niist\u00e4 asioista, joilla on hieman ristiriitainen maine WordPress-kehitt\u00e4jien keskuudessa:<\/p>\n<ul>\n<li>he ovat masentuneita koodausstandardeissa,<\/li>\n<li>WordPress tarjoaa p\u00e4\u00e4syn suoraan tietokantaan $wpdb:n kautta,<\/li>\n<li>tietokantakyselyiss\u00e4 on vivahteita, jotka on ymm\u00e4rrett\u00e4v\u00e4.<\/li>\n<\/ul>\n<p>Joten kun n\u00e4et jotain <a href=\"https:\/\/gist.github.com\/tommcfarlin\/cdc5a95834e8bf581fc8ac65fad6ce20\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">t\u00e4llaista<\/a> :<\/p>\n<pre><code>&lt;?php\n\nprivate function set_all_scheduled_events_as_public() {\n\n    global $wpdb;\n\n    \/\/ @codingStandardsIgnoreStart\n    $wpdb-&gt;query(\n        $wpdb-&gt;prepare(\n            \"\n            UPDATE $wpdb-&gt;posts\n            SET post_status = '%s'\n            WHERE post_type = '%s'\n            AND post_status = '%s'\n            \",\n            'publish',\n            'tribe_events',\n            'future') );\n    \/\/ @codingStandardsIgnoreEnd\n}\n<\/code><\/pre>\n<p>Mist\u00e4 tiet\u00e4\u00e4, onko se hyv\u00e4 liike vai ei? Ja mik\u00e4 viel\u00e4 parempaa, mist\u00e4 tied\u00e4t, pit\u00e4isik\u00f6 sinun k\u00e4ytt\u00e4\u00e4 hakemistotietokantakyselyit\u00e4 omassa koodissasi?<\/p>\n<p>Esit\u00e4n muutamia kysymyksi\u00e4, joita esit\u00e4n itselleni k\u00e4sitelless\u00e4\u00e4n niit\u00e4, kaikki alla.<\/p>\n<h3>1 Onko sarakkeissa indeksej\u00e4?<\/h3>\n<p>Ennen kuin k\u00e4yt\u00e4t suoria tietokantakyselyit\u00e4 WordPressiss\u00e4, on tarkistettava, onko kyseleill\u00e4ni sarakkeilla indeksej\u00e4 kyseisiss\u00e4 sarakkeissa.<\/p>\n<p>Ja <a href=\"https:\/\/en.wikipedia.org\/wiki\/Database_index\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">syy on t\u00e4m\u00e4<\/a> :<\/p>\n<blockquote>\n<p>Indeksej\u00e4 k\u00e4ytet\u00e4\u00e4n tietojen nopeaan paikantamiseen ilman, ett\u00e4 tietokantataulukon jokaiselta rivilt\u00e4 on haettava joka kerta, kun tietokantataulukkoa k\u00e4ytet\u00e4\u00e4n.<\/p>\n<\/blockquote>\n<p>T\u00e4rkeint\u00e4 on, ett\u00e4 sarakkeiden kyselyjen ja p\u00e4ivitysten nopeus on nopeampi, jos sarakkeissa on indeksej\u00e4.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-167356-61e7a1f8cf8a2.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-167356-61e7a1f8cf8a2.png\" alt=\"Suorat tietokantakyselyt WordPressiss\u00e4\" ><\/a><\/p>\n<p>Suorat tietokantakyselyt riippuvat tietokannan rakenteesta.<\/p>\n<p>T\u00e4t\u00e4 varten meid\u00e4n ei pit\u00e4isi tehd\u00e4 t\u00e4t\u00e4 jatkuvasti. Mutta joskus se on sopivaa (kuten kun p\u00e4ivit\u00e4t meta-arvoja) ja silloin, kun se ei ole.<\/p>\n<h3>2 Parametrioi kyselysi<\/h3>\n<p>Suoria tietokantakyselyj\u00e4 k\u00e4ytett\u00e4ess\u00e4 on eritt\u00e4in t\u00e4rke\u00e4\u00e4 parametroida kyselyt turvallisuuden vuoksi. Voit lukea kaiken t\u00e4st\u00e4 <a href=\"https:\/\/codex.wordpress.org\/Data_Validation#Database\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Codexista<\/a>, eik\u00e4 t\u00e4t\u00e4 kannata ohittaa.<\/p>\n<p>Suoraan <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/wpdb#Parameters\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dokumentaatiosta<\/a> :<\/p>\n<blockquote>\n<p>T\u00e4ydellisen yleiskatsauksen SQL:n poistumisesta WordPressiss\u00e4 on kohdassa Tietokannan tietojen validointi. Se on pakollinen luku kaikille WordPress-koodin tekij\u00f6ille ja laajennusten tekij\u00f6ille.<\/p>\n<\/blockquote>\n<p>Eli jos k\u00e4yt\u00e4t k\u00e4ytt\u00e4j\u00e4n sy\u00f6tteit\u00e4, sinun on varmistettava, ett\u00e4 se on desinfioitu, puhdas ja valmis lis\u00e4tt\u00e4v\u00e4ksi tietokantaan. Mutta mit\u00e4 se kannattaa, en melkein koskaan anna k\u00e4ytt\u00e4j\u00e4n sy\u00f6tteen vaikuttaa suoriin tietokantakyselyihin.<\/p>\n<p>Sen sijaan ne perustuvat yleens\u00e4 tietoihin, jotka minulla on koodissa ja haluan p\u00e4ivitt\u00e4\u00e4 tai muokata, kun ne ovat turvallisesti koodikannan hallinnassa.<\/p>\n<h3>3 Testaa ne ja testaa ne uudelleen<\/h3>\n<p>Ja lopuksi, ennen suorien kyselyjen toteuttamista, suosittelen:<\/p>\n<ol>\n<li>SQL-k\u00e4ytt\u00f6liittym\u00e4n k\u00e4ynnist\u00e4minen ja kyselyjen suorittaminen,<\/li>\n<li>Huomaa mahdolliset virheet, joita ne voivat aiheuttaa,<\/li>\n<li>Korjaa ne ja yrit\u00e4 uudelleen.<\/li>\n<\/ol>\n<p>Sitten kun olet suorittanut toimivan kyselytestin reunatapauksille varmistaaksesi, ett\u00e4 jokin ei mene rikki. T\u00e4m\u00e4 on erityisen totta, jos aiot k\u00e4ytt\u00e4\u00e4 LIKE-lauseita kyselyiss\u00e4si (joka on luultavasti artikkeli itsess\u00e4\u00e4n).<\/p>\n<h2>Puuttuuko minulta API?<\/h2>\n<p>WordPressin API:n koon ansiosta on aina mahdollisuus, ett\u00e4 minulta puuttuu jotain, laiminly\u00f6n jotain tai en yksinkertaisesti ole \u00e4lyk\u00e4s olemassa olevien API:iden suhteen.<\/p>\n<p>Ja jos n\u00e4in on, korjaan mielell\u00e4ni yll\u00e4 olevat tiedot (joten \u00e4l\u00e4 ep\u00e4r\u00f6i j\u00e4tt\u00e4\u00e4 kommenttia).<\/p>\n<p>Mutta sill\u00e4 v\u00e4lin, jos ty\u00f6skentelet suhteellisen m\u00e4\u00e4r\u00e4tyn datan kanssa, olet varma, ett\u00e4 sarakkeissa on indeksej\u00e4, osaat parametroida kyselyt ja olet testannut tiedot, niin ehk\u00e4 suoritat tietokantakyselyt ovat oikea tapa edet\u00e4.<\/p>\n<p>Ja jos n\u00e4in on, on olemassa muutamia tapoja sivuuttaa koodausstandardit ilman, ett\u00e4 PHP CodeSniffer huutaa sinulle. \ud83d\ude42<\/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>Vaikka WordPress-koodausstandardit eiv\u00e4t pid\u00e4 siit\u00e4, suorat tietokantakyselyt ovat toisinaan paras vaihtoehto tietyiss\u00e4 olosuhteissa.<\/p>\n","protected":false},"author":1,"featured_media":223796,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[719,895,843,864],"tags":[1166],"class_list":["post-229303","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kehittaejae","category-koodi","category-opetusohjelmia","category-wordpress-5","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/229303","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=229303"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/229303\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/223796"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=229303"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=229303"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=229303"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}