{"id":229533,"date":"2022-10-29T19:10:00","date_gmt":"2022-10-29T16:10:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229533"},"modified":"2022-11-09T08:21:15","modified_gmt":"2022-11-09T05:21:15","slug":"query-database-dirette-in-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/query-database-dirette-in-wordpress\/","title":{"rendered":"Query database dirette in WordPress"},"content":{"rendered":"\n<p>Se sei tornato su uno dei post che ho scritto negli ultimi, diciamo, due anni, \u00e8 probabile che mi trovi a sostenere l&#8217;utilizzo delle API disponibili sulle query del database di directory quasi ogni singola volta.<\/p>\n<p>E la verit\u00e0 \u00e8 che mi oriento ancora in quella direzione. Cio\u00e8, se c&#8217;\u00e8 un&#8217;astrazione o un&#8217;API disponibile per fare qualcosa di specifico, allora provo a usarla.<\/p>\n<p>Ma in un paio di progetti recenti, ho lavorato con alcuni set di dati relativamente grandi (grandi rispetto ai set di dati non aziendali). E cos\u00ec facendo, ho cercato di assicurarmi che gli aggiornamenti dei dati fossero il pi\u00f9 veloci possibile.<\/p>\n<p>In situazioni come questa, sebbene non piaccia agli <a href=\"https:\/\/tommcfarlin.com\/following-the-wordpress-coding-standards\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">standard di codifica di WordPress<\/a>, trovo occasionalmente che le query dirette al database siano l&#8217;opzione migliore per farlo in determinate condizioni.<\/p>\n<h2>Utilizzo di query database dirette<\/h2>\n<p>Le query dirette al database sono una di quelle cose che hanno una reputazione un po&#8217; mista tra gli sviluppatori di WordPress:<\/p>\n<ul>\n<li>sono scoraggiati negli standard di codifica,<\/li>\n<li>WordPress offre l&#8217;accesso direttamente al database tramite $wpdb,<\/li>\n<li>ci sono sfumature nelle query del database che dovrebbero essere comprese.<\/li>\n<\/ul>\n<p>Quindi quando vedi qualcosa del <a href=\"https:\/\/gist.github.com\/tommcfarlin\/cdc5a95834e8bf581fc8ac65fad6ce20\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">genere<\/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>Come fai a sapere se \u00e8 una buona mossa o no? E ancora meglio, come fai a sapere se dovresti utilizzare le query del database di directory nel tuo codice?<\/p>\n<p>Ci sono alcune domande che normalmente mi pongo quando le affronto tutte condivise di seguito.<\/p>\n<h3>1 Ci sono indici sulle colonne?<\/h3>\n<p>Prima di utilizzare le query dirette al database in WordPress, \u00e8 necessario verificare se le colonne che sto interrogando hanno indici su dette colonne.<\/p>\n<p>E <a href=\"https:\/\/en.wikipedia.org\/wiki\/Database_index\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">il motivo \u00e8 questo<\/a> :<\/p>\n<blockquote>\n<p>Gli indici vengono utilizzati per individuare rapidamente i dati senza dover cercare in ogni riga di una tabella di database ogni volta che si accede a una tabella di database.<\/p>\n<\/blockquote>\n<p>La linea di fondo \u00e8 che la velocit\u00e0 con cui \u00e8 possibile eseguire query e aggiornare le colonne \u00e8 maggiore se sono presenti indici sulle colonne.<\/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=\"Query database dirette in WordPress\" ><\/a><\/p>\n<p>Le query dirette al database dipendono dalla struttura del database.<\/p>\n<p>A tal fine, questo non \u00e8 qualcosa che dovremmo fare tutto il tempo. Ma ci sono momenti in cui \u00e8 appropriato (come quando stai aggiornando un set di meta valori) e quando non lo \u00e8.<\/p>\n<h3>2 Parametrizza le tue query<\/h3>\n<p>Quando si utilizzano query dirette al database, \u00e8 estremamente importante parametrizzare le query per motivi di sicurezza. Puoi leggere tutto su questo <a href=\"https:\/\/codex.wordpress.org\/Data_Validation#Database\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">nel Codex<\/a> e questo non \u00e8 qualcosa da saltare.<\/p>\n<p>Direttamente <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/wpdb#Parameters\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dalla documentazione<\/a> :<\/p>\n<blockquote>\n<p>Per una panoramica pi\u00f9 completa dell&#8217;escape di SQL in WordPress, vedere Convalida dei dati del database. \u00c8 una lettura obbligata per tutti i contributori di codice WordPress e gli autori di plugin.<\/p>\n<\/blockquote>\n<p>Cio\u00e8, se stai prendendo l&#8217;input dell&#8217;utente, devi assicurarti che sia disinfettato, pulito e pronto per essere inserito nel database. Ma, per quel che vale, non permetto quasi mai all&#8217;input dell&#8217;utente di influire sulle query dirette del database.<\/p>\n<p>Invece, sono normalmente basati sui dati che ho nel codice e voglio aggiornare o modificare quando sono al sicuro nel regno del controllo della codebase.<\/p>\n<h3>3 Provali e provali di nuovo<\/h3>\n<p>E infine, prima di implementare qualsiasi query diretta, ti consiglio:<\/p>\n<ol>\n<li>Avviare il front-end SQL ed eseguire le query,<\/li>\n<li>Nota eventuali errori che possono generare,<\/li>\n<li>Correggili e riprova.<\/li>\n<\/ol>\n<p>Quindi, una volta che hai un test di query funzionante per i casi limite per assicurarti che qualcosa non venga alterato. Ci\u00f2 \u00e8 particolarmente vero se utilizzerai le clausole LIKE nelle tue query (che probabilmente \u00e8 un articolo a s\u00e9 stante).<\/p>\n<h2>Mi manca un&#8217;API?<\/h2>\n<p>Con le dimensioni dell&#8217;API di WordPress, c&#8217;\u00e8 sempre la possibilit\u00e0 che mi manchi qualcosa, trascuri qualcosa o semplicemente non sia intelligente riguardo alle API esistenti.<\/p>\n<p>E se questo \u00e8 il caso, allora sono felice di correggere le informazioni sopra (quindi non esitare a lasciare un commento).<\/p>\n<p>Ma nel frattempo, se stai lavorando con un dato relativamente impostato, sei sicuro che ci siano indici sulle colonne, sai come parametrizzare le query e hai testato i dati, quindi magari facendo con direct le query di database sono la strada da percorrere.<\/p>\n<p>E se \u00e8 cos\u00ec, ci sono alcuni modi per ignorare gli standard di codifica senza che PHP CodeSniffer ti sgridi. \ud83d\ude42<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Sebbene agli standard di codifica di WordPress non piaccia, le query dirette al database occasionalmente sono l&#8217;opzione migliore in determinate condizioni.<\/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":[896,720,844,865],"tags":[1168],"class_list":["post-229533","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codice","category-sviluppatore","category-tutorial","category-wordpress-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/229533","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=229533"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/229533\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/223796"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=229533"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=229533"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=229533"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}