{"id":231084,"date":"2022-12-08T13:37:00","date_gmt":"2022-12-08T10:37:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231084"},"modified":"2022-12-07T11:53:25","modified_gmt":"2022-12-07T08:53:25","slug":"uno-stub-per-lavorare-con-le-query-di-database-in-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/uno-stub-per-lavorare-con-le-query-di-database-in-wordpress\/","title":{"rendered":"Uno stub per lavorare con le query di database in WordPress"},"content":{"rendered":"\n<p>Per quanto io sia un fan di alcune API di WordPress per interrogare il database come:<\/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>e cos\u00ec via<\/li>\n<\/ul>\n<p>Sono anche un fan delle query direttamente sul database quando necessario.<\/p>\n<p>Come noterai, c&#8217;\u00e8 un modo coerente in cui lo faccio e poich\u00e9 ci sono volte in cui lo faccio pi\u00f9 frequentemente, negli ultimi tempi, ecco un formato di base per lavorare con le query di database in WordPress.<\/p>\n<p>Se lo faccio, per\u00f2, generalmente ci sono cose che tengo a mente:<\/p>\n<ol>\n<li>assicurati sempre che la query sia parametrizzata (soprattutto nel caso di input dell&#8217;utente),<\/li>\n<li>restituire le informazioni sotto forma di un array associativo.<\/li>\n<\/ol>\n<p>Il primo caso riguarda la sicurezza; il secondo \u00e8 pi\u00f9 o meno per comodit\u00e0 di semplificare l&#8217;iterazione dei dati tramite le funzioni di array PHP.<\/p>\n<h2>Query al database in WordPress<\/h2>\n<p>Innanzitutto, \u00e8 importante comprendere due concetti:<\/p>\n<ol>\n<li>parametrizzazione,<\/li>\n<li>colonna_array<\/li>\n<\/ol>\n<p>Questi sono il fulcro di come scrivo le mie domande e lavoro con i risultati di esse.<\/p>\n<h3>1 Parametrizzazione<\/h3>\n<p>Puoi leggere di pi\u00f9 su questo nel Codex, ma la parametrizzazione \u00e8 un modo in cui siamo in grado di scrivere query che funzionano per prevenire l&#8217;iniezione di SQL.<\/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\">Dalla pagina del Codice<\/a><\/strong> :<\/p>\n<blockquote>\n<p>Tutti i dati nelle query SQL devono essere sottoposti a escape SQL prima che la query SQL venga eseguita per prevenire attacchi di SQL injection. Il <code>prepare<\/code>metodo esegue questa funzionalit\u00e0 per WordPress, che supporta sia una sintassi <a href=\"https:\/\/php.net\/sprintf\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">sprintf()<\/a> -like che <a href=\"https:\/\/php.net\/vsprintf\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">vsprintf() -like<\/a>.<\/p>\n<\/blockquote>\n<p>Vale a dire che il metodo supporta token come <strong>%s<\/strong>, <strong>%d<\/strong> e <strong>%f<\/strong> quando si passano informazioni nella query. Mostrer\u00f2 un esempio di questo pi\u00f9 avanti nel post.<\/p>\n<h3>2 Lavorare con le colonne della matrice<\/h3>\n<p>I risultati di tali query possono essere restituiti in una variet\u00e0 di modi diversi. Vale a dire, come un oggetto, un array indicizzato numericamente o un array associativo. Il pi\u00f9 delle volte, mi piace usare gli array (e mostrer\u00f2 come farlo in WordPress pi\u00f9 avanti in questo post).<\/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=\"Uno stub per lavorare con le query di database in WordPress\" ><\/a><\/p>\n<p>Il motivo, tuttavia, \u00e8 che posso sfruttare <a href=\"https:\/\/php.net\/manual\/en\/function.array-column.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">array_column<\/a>. Dal manuale PHP:<\/p>\n<blockquote>\n<p>array_column() restituisce i valori da una singola colonna dell&#8217;input, identificata da column_key. Facoltativamente, \u00e8 possibile fornire una chiave_indice per indicizzare i valori nella matrice restituita in base ai valori della colonna chiave_indice della matrice di input.<\/p>\n<\/blockquote>\n<p>Ci\u00f2 significa che se hai un array e ha un gruppo di risultati ognuno dei quali ha la stessa colonna, puoi facilmente semplicemente le informazioni passando l&#8217;array in un metodo e quindi passando il nome della colonna in un metodo.<\/p>\n<p>Il risultato? Una matrice numericamente indicizzata dei valori. Ci\u00f2 rende molto pi\u00f9 semplice scorrere i dati tramite <a href=\"https:\/\/php.net\/manual\/en\/function.array-map.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">array_map<\/a><strong>,<\/strong> using <strong><a href=\"https:\/\/php.net\/manual\/en\/control-structures.for.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">for<\/a><\/strong> o using <strong><a href=\"https:\/\/php.net\/manual\/en\/control-structures.foreach.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">foreach<\/a><\/strong>.<\/p>\n<h2>Uno stub per interrogare il database<\/h2>\n<p>Con questa logica in atto, <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/83522e41b58ba2ee8633282cb03e6a60#file-00-query-stub-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ecco lo stub<\/a><\/strong> che normalmente utilizzo ogni volta che lavoro direttamente con le query del database:<\/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>Ed ecco un esempio con un paio di informazioni diverse in modo da poter vedere <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/83522e41b58ba2ee8633282cb03e6a60#file-01-example-query-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">come funziona<\/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>Fare query sulla tabella <strong>wp_user_meta<\/strong> potrebbe sembrare sciocco poich\u00e9 get_user_meta \u00e8 una funzione API valida, ma ho pensato che sarebbe stata una query facile da capire dato quello che sto cercando di spiegare in questo passato.<\/p>\n<p>Ad ogni modo, non posso fornire la query n\u00e9 posso gestire il caso in cui i risultati potrebbero tornare con pi\u00f9 colonne (in tal caso, dovrai lavorare con qualcosa di diverso da <strong>array_map<\/strong>, ma dovrebbe essere abbastanza facile, giusto? )<\/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>C&#8217;\u00e8 un modo coerente in cui vado a interrogare il database di WordPress. Dato che ci sono volte in cui l&#8217;ho fatto pi\u00f9 frequentemente, negli ultimi tempi, ecco un formato di base per lavorare con le query di database in WordPress.<\/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":[896,720,844,865],"tags":[1168],"class_list":["post-231084","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\/231084","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=231084"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/231084\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/235713"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=231084"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=231084"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=231084"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}