{"id":230909,"date":"2022-12-08T13:35:00","date_gmt":"2022-12-08T10:35:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230909"},"modified":"2022-12-07T11:53:23","modified_gmt":"2022-12-07T08:53:23","slug":"tyyppi-tietokantakyselyjen-kanssa-tyoeskentelemiseen-wordpressissae","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/tyyppi-tietokantakyselyjen-kanssa-tyoeskentelemiseen-wordpressissae\/","title":{"rendered":"Tyyppi tietokantakyselyjen kanssa ty\u00f6skentelemiseen WordPressiss\u00e4"},"content":{"rendered":"\n<p>Niin paljon kuin olenkin tiettyjen WordPress-sovellusliittymien fani tietokannan kyselyihin, kuten:<\/p>\n<ul>\n<li><strong><a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/WP_Query\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WP_Query<\/a><\/strong> ,<\/li>\n<li><strong><a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/WP_User_Query\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WP_User_Query<\/a><\/strong> ,<\/li>\n<li><strong><a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/WP_Meta_Query#Related\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WP_Meta_Query<\/a><\/strong> ,<\/li>\n<li>ja niin edelleen<\/li>\n<\/ul>\n<p>Pid\u00e4n my\u00f6s siit\u00e4, ett\u00e4 kyselyt tehd\u00e4\u00e4n tarvittaessa suoraan tietokannasta.<\/p>\n<p>Kuten huomaat, minulla on johdonmukainen tapa tehd\u00e4 t\u00e4m\u00e4, ja koska olen joskus tehnyt t\u00e4m\u00e4n useammin, viime aikoina t\u00e4ss\u00e4 on perusmuoto tietokantakyselyjen kanssa ty\u00f6skentelemiseen WordPressiss\u00e4.<\/p>\n<p>Jos kuitenkin teen t\u00e4m\u00e4n, muistan yleens\u00e4 seuraavat asiat:<\/p>\n<ol>\n<li>varmista aina, ett\u00e4 kysely on parametroitu (erityisesti k\u00e4ytt\u00e4j\u00e4n sy\u00f6tteen tapauksessa),<\/li>\n<li>palauttaa tiedot assosiatiivisen taulukon muodossa.<\/li>\n<\/ol>\n<p>Ensimm\u00e4inen tapaus on turvallisuus; toinen on enemm\u00e4n tai v\u00e4hemm\u00e4n mukavuussyist\u00e4, jotta tietojen iterointi olisi yksinkertaisempaa PHP-taulukkofunktioiden avulla.<\/p>\n<h2>Tietokantakyselyt WordPressiss\u00e4<\/h2>\n<p>Ensinn\u00e4kin on t\u00e4rke\u00e4\u00e4 ymm\u00e4rt\u00e4\u00e4 kaksi k\u00e4sitett\u00e4:<\/p>\n<ol>\n<li>parametrointi,<\/li>\n<li>array_column<\/li>\n<\/ol>\n<p>N\u00e4m\u00e4 ovat ydin siin\u00e4, miten kirjoitan kyselyit\u00e4ni ja ty\u00f6skentelen niiden tulosten kanssa.<\/p>\n<h3>1 Parametrisointi<\/h3>\n<p>Voit lukea t\u00e4st\u00e4 lis\u00e4\u00e4 Codexista, mutta parametrointi on tapa, jolla voimme kirjoittaa kyselyit\u00e4, jotka est\u00e4v\u00e4t SQL-injektiota vastaan.<\/p>\n<p><strong><a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/wpdb#Protect_Queries_Against_SQL_Injection_Attacks\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Codex-sivulta<\/a><\/strong> :<\/p>\n<blockquote>\n<p>Kaikille SQL-kyselyjen tiedoille on lis\u00e4tt\u00e4v\u00e4 SQL-suojaus ennen SQL-kyselyn suorittamista SQL-injektiohy\u00f6kk\u00e4ysten est\u00e4miseksi. Menetelm\u00e4 <code>prepare<\/code>suorittaa t\u00e4m\u00e4n toiminnon WordPressille, joka tukee sek\u00e4 <a href=\"https:\/\/php.net\/sprintf\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">sprintf()<\/a> -like ett\u00e4 <a href=\"https:\/\/php.net\/vsprintf\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">vsprintf()<\/a> -tyyppist\u00e4 syntaksia.<\/p>\n<\/blockquote>\n<p>T\u00e4m\u00e4 tarkoittaa, ett\u00e4 menetelm\u00e4 tukee tunnisteita, kuten <strong>%s<\/strong>, <strong>%d<\/strong> ja <strong>%f<\/strong>, kun tietoja v\u00e4litet\u00e4\u00e4n kyselyyn. N\u00e4yt\u00e4n t\u00e4st\u00e4 esimerkin my\u00f6hemmin postauksessa.<\/p>\n<h3>2 Array-sarakkeiden k\u00e4ytt\u00e4minen<\/h3>\n<p>T\u00e4llaisten kyselyiden tulokset voidaan palauttaa useilla eri tavoilla. Nimitt\u00e4in objektina, numeerisesti indeksoituna taulukkona tai assosiatiivisena taulukona. Useimmiten tykk\u00e4\u00e4n k\u00e4ytt\u00e4\u00e4 taulukoita (ja n\u00e4yt\u00e4n kuinka t\u00e4m\u00e4 tehd\u00e4\u00e4n WordPressiss\u00e4 my\u00f6hemmin t\u00e4ss\u00e4 viestiss\u00e4).<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162387-61e73d7998688.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-162387-61e73d7998688.png\" alt=\"Tyyppi tietokantakyselyjen kanssa ty\u00f6skentelemiseen WordPressiss\u00e4\" ><\/a><\/p>\n<p>Syyn\u00e4 on kuitenkin se, ett\u00e4 voin hy\u00f6dynt\u00e4\u00e4 <a href=\"https:\/\/php.net\/manual\/en\/function.array-column.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">array_column -parametria<\/a>. PHP manuaalista:<\/p>\n<blockquote>\n<p>array_column() palauttaa arvot yhdest\u00e4 sy\u00f6tteen sarakkeesta, joka tunnistetaan sarakkeen_avaimella. Valinnaisesti voidaan tarjota index_key indeksoimaan palautetun taulukon arvot sy\u00f6tt\u00f6taulukon index_key-sarakkeen arvoilla.<\/p>\n<\/blockquote>\n<p>T\u00e4m\u00e4 tarkoittaa, ett\u00e4 jos sinulla on taulukko ja siin\u00e4 on joukko tuloksia, joista jokaisella on sama sarake, voit helposti yksinkertaistaa tiedot v\u00e4litt\u00e4m\u00e4ll\u00e4 taulukon menetelm\u00e4\u00e4n ja v\u00e4litt\u00e4m\u00e4ll\u00e4 sitten sarakkeen nimen menetelm\u00e4\u00e4n.<\/p>\n<p>Lopputulos? Numeerisesti indeksoitu arvojen joukko. T\u00e4m\u00e4 tekee tietojen iteroinnista paljon helpompaa <a href=\"https:\/\/php.net\/manual\/en\/function.array-map.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">array_map<\/a> <strong><a href=\"https:\/\/php.net\/manual\/en\/control-structures.for.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">:n<\/a><\/strong>, foreachin <strong>tai<\/strong> <strong><a href=\"https:\/\/php.net\/manual\/en\/control-structures.foreach.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">foreach<\/a><\/strong> :n avulla .<\/p>\n<h2>Tyyppi tietokannan kyselyyn<\/h2>\n<p>Kun t\u00e4m\u00e4 perustelu on paikallaan, <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/83522e41b58ba2ee8633282cb03e6a60#file-00-query-stub-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">t\u00e4ss\u00e4 on tynk\u00e4<\/a><\/strong>, jota k\u00e4yt\u00e4n yleens\u00e4 aina, kun ty\u00f6skentelen suoraan tietokantakyselyjen kanssa:<\/p>\n<pre><code>&lt;?php\nglobal $wpdb;\n$results = $wpdb-&gt;get_results(\n    $wpdb-&gt;prepare(\n        \"\n        \",\n        $userId\n    ),\n    ARRAY_A\n);\n\nif (empty($results)) {\n  return;\n}\n$results = array_map($results, 'column_name');<\/code><\/pre>\n<p>Ja t\u00e4ss\u00e4 on esimerkki, jossa on pari erilaista tietoa, jotta n\u00e4et, <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/83522e41b58ba2ee8633282cb03e6a60#file-01-example-query-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">miten se toimii<\/a><\/strong> :<\/p>\n<pre><code>&lt;?php\nglobal $wpdb;\n$results = $wpdb-&gt;get_results(\n    $wpdb-&gt;prepare(\n        \"\n        SELECT\n            user_id,\n            meta_value\n        FROM $wpdb-&gt;usermeta\n        WHERE meta_key LIKE %s\n        AND user_id = %d\n        \",\n        '%wc_authorize_net_cim_customer_profile_id%',\n        wp_get_current_user()-&gt;ID;\n    ),\n    ARRAY_A\n);\n\nif (empty($results)) {\n    return [];\n}\n$results = array_map($results, 'meta_value');<\/code><\/pre>\n<p><strong>Kyselyn tekeminen wp_user_meta-<\/strong> taulukkoa vastaan \u200b\u200bsaattaa tuntua typer\u00e4lt\u00e4, koska get_user_meta on kelvollinen API-toiminto, mutta ajattelin, ett\u00e4 se olisi helppo ymm\u00e4rt\u00e4\u00e4, koska yrit\u00e4n selitt\u00e4\u00e4, mit\u00e4 yrit\u00e4n selitt\u00e4\u00e4.<\/p>\n<p>Joka tapauksessa en voi toimittaa kysely\u00e4 enk\u00e4 k\u00e4sitell\u00e4 tapausta, jossa tulokset saattavat tulla takaisin useilla sarakkeilla (t\u00e4ss\u00e4 tapauksessa sinun on k\u00e4ytett\u00e4v\u00e4 jotain muuta kuin <strong>array_map<\/strong>, mutta sen pit\u00e4isi olla tarpeeksi helppoa, eik\u00f6? )<\/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>Minulla on johdonmukainen tapa tehd\u00e4 kyselyit\u00e4 WordPress-tietokannasta. Koska olen joskus tehnyt t\u00e4t\u00e4 useammin kuin viime aikoina, t\u00e4ss\u00e4 on perusmuoto tietokantakyselyiden kanssa ty\u00f6skentelemiseen WordPressiss\u00e4.<\/p>\n","protected":false},"author":1,"featured_media":235713,"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-230909","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\/230909","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=230909"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/230909\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/235713"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=230909"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=230909"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=230909"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}