{"id":228729,"date":"2022-10-29T19:02:00","date_gmt":"2022-10-29T16:02:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228729"},"modified":"2022-11-09T04:03:02","modified_gmt":"2022-11-09T01:03:02","slug":"otsesed-andmebaasipaeringud-wordpressis","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/otsesed-andmebaasipaeringud-wordpressis\/","title":{"rendered":"Otsesed andmebaasip\u00e4ringud WordPressis"},"content":{"rendered":"\n<p>Kui olete j\u00f5udnud m\u00f5ne postituse l\u00e4bi, mille olen kirjutanud viimase, n\u00e4iteks kahe aasta jooksul, leiate t\u00f5en\u00e4oliselt peaaegu iga kord, kui ma propageerin saadaolevate API-de kasutamist kataloogide andmebaasi p\u00e4ringute puhul.<\/p>\n<p>Ja t\u00f5de on see, et ma kaldun endiselt sellesse suunda. See t\u00e4hendab, et kui millegi konkreetse tegemiseks on saadaval abstraktsioon v\u00f5i API, siis proovin seda kasutada.<\/p>\n<p>Kuid paaris hiljutises projektis olen t\u00f6\u00f6tanud suhteliselt suurte andmekogumitega (suured v\u00f5rreldes mitteettev\u00f5tte tasandi andmekogumitega). Ja seda tehes olen p\u00fc\u00fcdnud tagada, et andmete v\u00e4rskendused toimuksid v\u00f5imalikult kiiresti.<\/p>\n<p>Sellistes olukordades, kuigi <a href=\"https:\/\/tommcfarlin.com\/following-the-wordpress-coding-standards\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WordPressi kodeerimisstandarditele<\/a> see ei meeldi, leian, et m\u00f5nikord on andmebaasi otsep\u00e4ringud teatud tingimustel parim valik.<\/p>\n<h2>Andmebaasi otsep\u00e4ringute kasutamine<\/h2>\n<p>Otsesed andmebaasip\u00e4ringud on \u00fcks neist asjadest, millel on WordPressi arendajate seas pisut segane maine:<\/p>\n<ul>\n<li>nad on kodeerimisstandardites heidutatud,<\/li>\n<li>WordPress pakub juurdep\u00e4\u00e4su otse andmebaasile $wpdb kaudu,<\/li>\n<li>andmebaasip\u00e4ringutes on n\u00fcansse, millest tuleks aru saada.<\/li>\n<\/ul>\n<p>Nii et kui n\u00e4ete midagi <a href=\"https:\/\/gist.github.com\/tommcfarlin\/cdc5a95834e8bf581fc8ac65fad6ce20\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">sellist<\/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>Kuidas sa tead, kas see on hea samm v\u00f5i mitte? Ja veel parem, kuidas teate, kas peaksite oma koodis kasutama kataloogiandmebaasi p\u00e4ringuid?<\/p>\n<p>Neid k\u00fcsimusi k\u00e4sitledes esitan tavaliselt endalt m\u00f5ned allpool esitatud k\u00fcsimused.<\/p>\n<h3>1 Kas veergudel on indeksid?<\/h3>\n<p>Enne otseste andmebaasip\u00e4ringute kasutamist WordPressis kontrollige, kas veergudel, mille kohta p\u00e4ringuid esitan, on nendel veergudel indeksid.<\/p>\n<p>Ja <a href=\"https:\/\/en.wikipedia.org\/wiki\/Database_index\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">p\u00f5hjus on j\u00e4rgmine<\/a> :<\/p>\n<blockquote>\n<p>Indekseid kasutatakse andmete kiireks leidmiseks, ilma et oleks vaja otsida andmebaasi tabeli igalt realt iga kord, kui andmebaasi tabelile juurde p\u00e4\u00e4seb.<\/p>\n<\/blockquote>\n<p>P\u00f5him\u00f5te on see, et veergude p\u00e4ringute ja v\u00e4rskendamise kiirus on kiirem, kui veergudel on indeksid.<\/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=\"Otsesed andmebaasip\u00e4ringud WordPressis\" ><\/a><\/p>\n<p>Otsesed andmebaasip\u00e4ringud s\u00f5ltuvad andmebaasi struktuurist.<\/p>\n<p>Selleks ei peaks me seda pidevalt tegema. Kuid on aegu, mil see on asjakohane (n\u00e4iteks metav\u00e4\u00e4rtuste komplekti v\u00e4rskendamisel) ja millal mitte.<\/p>\n<h3>2 Parameetristage oma p\u00e4ringud<\/h3>\n<p>Otseste andmebaasip\u00e4ringute kasutamisel on turvalisuse huvides \u00e4\u00e4rmiselt oluline p\u00e4ringute parameetrite m\u00e4\u00e4ramine. Seda k\u00f5ike saate lugeda <a href=\"https:\/\/codex.wordpress.org\/Data_Validation#Database\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Codexist<\/a> ja see ei ole midagi, mida vahele j\u00e4tta.<\/p>\n<p>Otse <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/wpdb#Parameters\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dokumentatsioonist<\/a> :<\/p>\n<blockquote>\n<p>T\u00e4ielikuma \u00fclevaate saamiseks SQL-i p\u00f5genemisest WordPressis vaadake andmebaasi andmete valideerimine. See on kohustuslik lugemine k\u00f5igile WordPressi koodi kaasautoritele ja pistikprogrammide autoritele.<\/p>\n<\/blockquote>\n<p>See t\u00e4hendab, et kui kasutate kasutaja sisendit, peate veenduma, et see on puhastatud, puhas ja valmis andmebaasi sisestamiseks. Kuid mis see v\u00e4\u00e4rt on, ei luba ma peaaegu kunagi, et kasutaja sisend m\u00f5jutab otseseid andmebaasip\u00e4ringuid.<\/p>\n<p>Selle asemel p\u00f5hinevad need tavaliselt andmetel, mis mul koodis on ja mida soovin v\u00e4rskendada v\u00f5i muuta, kui need on ohutult koodibaasi kontrolli all.<\/p>\n<h3>3 Testige neid ja testige neid uuesti<\/h3>\n<p>Ja l\u00f5puks, enne otsep\u00e4ringute rakendamist, soovitan:<\/p>\n<ol>\n<li>SQL-i kasutajaliidese k\u00e4ivitamine ja p\u00e4ringute t\u00e4itmine,<\/li>\n<li>Pange t\u00e4hele k\u00f5iki vigu, mida need v\u00f5ivad p\u00f5hjustada,<\/li>\n<li>Parandage need ja proovige uuesti.<\/li>\n<\/ol>\n<p>Seej\u00e4rel, kui teil on toimiv p\u00e4ringutest servajuhtumite jaoks, veendumaks, et midagi ei l\u00e4he rikutuks. See kehtib eriti siis, kui kavatsete oma p\u00e4ringutes kasutada LIKE-klausleid (mis on t\u00f5en\u00e4oliselt artikkel omaette).<\/p>\n<h2>Kas mul on API puudu?<\/h2>\n<p>WordPressi API suuruse t\u00f5ttu on alati v\u00f5imalus, et mul on midagi puudu, ma j\u00e4tan midagi t\u00e4helepanuta v\u00f5i ei ole lihtsalt olemasolevate API-de osas tark.<\/p>\n<p>Ja kui see nii on, siis parandan hea meelega \u00fclaltoodud teavet (nii et \u00e4rge kartke kommentaari j\u00e4tta).<\/p>\n<p>Kui aga t\u00f6\u00f6tate vahepeal suhteliselt seatud andmetega, siis olete kindel, et veergudel on indeksid, teate, kuidas p\u00e4ringuid parameetristada, ja olete andmeid testinud, siis v\u00f5ib-olla teete seda otse andmebaasip\u00e4ringud on \u00f5ige tee.<\/p>\n<p>Ja kui see nii on, on m\u00f5ned viisid kodeerimisstandardite ignoreerimiseks, ilma et PHP CodeSniffer teie peale karjuks. \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>Kuigi WordPressi kodeerimisstandarditele see ei meeldi, suunake aeg-ajalt andmebaasip\u00e4ringuid, et olla teatud tingimustel parim valik.<\/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":[718,894,842,863],"tags":[1165],"class_list":["post-228729","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arendaja","category-kood","category-opetused","category-wordpress-4","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/228729","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=228729"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/228729\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/223796"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=228729"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=228729"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=228729"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}