{"id":229297,"date":"2022-10-29T19:23:00","date_gmt":"2022-10-29T16:23:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229297"},"modified":"2022-11-09T06:21:38","modified_gmt":"2022-11-09T03:21:38","slug":"consultas-diretas-ao-banco-de-dados-no-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/consultas-diretas-ao-banco-de-dados-no-wordpress\/","title":{"rendered":"Consultas diretas ao banco de dados no WordPress"},"content":{"rendered":"\n<p>Se voc\u00ea voltou a qualquer uma das postagens que escrevi nos \u00faltimos, digamos, dois anos, \u00e9 prov\u00e1vel que voc\u00ea me encontre defendendo o uso de APIs dispon\u00edveis em consultas de banco de dados de diret\u00f3rio quase todas as vezes.<\/p>\n<p>E a verdade \u00e9 que ainda me inclino nessa dire\u00e7\u00e3o. Ou seja, se houver uma abstra\u00e7\u00e3o ou uma API dispon\u00edvel para fazer algo espec\u00edfico, tento us\u00e1-la.<\/p>\n<p>Mas em alguns projetos recentes, tenho trabalhado com alguns conjuntos de dados relativamente grandes (grandes em compara\u00e7\u00e3o com conjuntos de dados de n\u00edvel n\u00e3o empresarial). E, ao fazer isso, tentei garantir que as atualiza\u00e7\u00f5es dos dados fossem o mais r\u00e1pido poss\u00edvel.<\/p>\n<p>Em situa\u00e7\u00f5es como essa, embora os <a href=\"https:\/\/tommcfarlin.com\/following-the-wordpress-coding-standards\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Padr\u00f5es de Codifica\u00e7\u00e3o do WordPress<\/a> n\u00e3o gostem, acho que consultas diretas ao banco de dados ocasionalmente s\u00e3o a melhor op\u00e7\u00e3o para faz\u00ea-lo sob certas condi\u00e7\u00f5es.<\/p>\n<h2>Usando consultas diretas ao banco de dados<\/h2>\n<p>As consultas diretas ao banco de dados s\u00e3o uma daquelas coisas que t\u00eam uma reputa\u00e7\u00e3o um pouco mista entre os desenvolvedores do WordPress:<\/p>\n<ul>\n<li>eles s\u00e3o desencorajados nos padr\u00f5es de codifica\u00e7\u00e3o,<\/li>\n<li>WordPress oferece acesso direto ao banco de dados via $wpdb,<\/li>\n<li>existem nuances nas consultas de banco de dados que devem ser compreendidas.<\/li>\n<\/ul>\n<p>Ent\u00e3o, quando voc\u00ea v\u00ea algo <a href=\"https:\/\/gist.github.com\/tommcfarlin\/cdc5a95834e8bf581fc8ac65fad6ce20\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">assim<\/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>Como saber se \u00e9 uma boa jogada ou n\u00e3o? E melhor ainda, como voc\u00ea sabe se deve usar consultas de banco de dados de diret\u00f3rio em seu pr\u00f3prio c\u00f3digo?<\/p>\n<p>Existem algumas perguntas que normalmente me fa\u00e7o ao lidar com elas, todas compartilhadas abaixo.<\/p>\n<h3>1 Existem \u00edndices nas colunas?<\/h3>\n<p>Antes de fazer o uso de consultas diretas ao banco de dados no WordPress \u00e9 verificar se as colunas que estou consultando possuem \u00edndices nas referidas colunas.<\/p>\n<p>E <a href=\"https:\/\/en.wikipedia.org\/wiki\/Database_index\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">o motivo \u00e9 este<\/a> :<\/p>\n<blockquote>\n<p>\u00cdndices s\u00e3o usados \u200b\u200bpara localizar dados rapidamente sem ter que pesquisar cada linha em uma tabela de banco de dados toda vez que uma tabela de banco de dados \u00e9 acessada.<\/p>\n<\/blockquote>\n<p>A conclus\u00e3o \u00e9 que a velocidade com que voc\u00ea pode consultar e atualizar colunas \u00e9 mais r\u00e1pida se houver \u00edndices nas colunas.<\/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=\"Consultas diretas ao banco de dados no WordPress\" ><\/a><\/p>\n<p>As consultas diretas ao banco de dados dependem da estrutura do banco de dados.<\/p>\n<p>Para esse fim, isso n\u00e3o \u00e9 algo que devemos fazer o tempo todo. Mas h\u00e1 momentos em que \u00e9 apropriado (como quando voc\u00ea est\u00e1 atualizando um conjunto de valores meta) e quando n\u00e3o \u00e9.<\/p>\n<h3>2 Parametrize suas consultas<\/h3>\n<p>Ao usar consultas diretas ao banco de dados, \u00e9 extremamente importante parametrizar suas consultas por quest\u00e3o de seguran\u00e7a. Voc\u00ea pode ler tudo sobre isso <a href=\"https:\/\/codex.wordpress.org\/Data_Validation#Database\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">no Codex<\/a>, e isso n\u00e3o \u00e9 algo a ser ignorado.<\/p>\n<p>Direto <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/wpdb#Parameters\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">da documenta\u00e7\u00e3o<\/a> :<\/p>\n<blockquote>\n<p>Para uma vis\u00e3o mais completa do escape de SQL no WordPress, consulte Valida\u00e7\u00e3o de dados do banco de dados. \u00c9 uma leitura obrigat\u00f3ria para todos os contribuidores de c\u00f3digo do WordPress e autores de plugins.<\/p>\n<\/blockquote>\n<p>Ou seja, se voc\u00ea estiver recebendo a entrada do usu\u00e1rio, precisar\u00e1 garantir que ela esteja limpa, limpa e pronta para ser inserida no banco de dados. Mas, vale a pena, quase nunca permito que a entrada do usu\u00e1rio afete as consultas diretas ao banco de dados.<\/p>\n<p>Em vez disso, eles s\u00e3o normalmente baseados em dados que tenho no c\u00f3digo e quero atualizar ou modificar quando estiverem seguros dentro do dom\u00ednio de controle da base de c\u00f3digo.<\/p>\n<h3>3 Teste-os e teste-os novamente<\/h3>\n<p>E, finalmente, antes de implementar qualquer consulta direta, recomendo:<\/p>\n<ol>\n<li>Iniciando seu front-end SQL e executando as consultas,<\/li>\n<li>Observe quaisquer erros que eles possam lan\u00e7ar,<\/li>\n<li>Corrija-os e tente novamente.<\/li>\n<\/ol>\n<p>Ent\u00e3o, uma vez que voc\u00ea tenha um teste de consulta funcional para casos extremos, para garantir que algo n\u00e3o seja mutilado. Isso \u00e9 especialmente verdadeiro se voc\u00ea estiver usando cl\u00e1usulas LIKE em suas consultas (o que provavelmente \u00e9 um artigo em si).<\/p>\n<h2>Estou perdendo uma API?<\/h2>\n<p>Com o tamanho da API do WordPress, sempre h\u00e1 uma chance de estar faltando alguma coisa, negligenciando algo ou simplesmente n\u00e3o estar sendo inteligente sobre as APIs existentes.<\/p>\n<p>E se for esse o caso, ficarei feliz em corrigir as informa\u00e7\u00f5es acima (ent\u00e3o n\u00e3o hesite em deixar um coment\u00e1rio).<\/p>\n<p>Mas, enquanto isso, se voc\u00ea est\u00e1 trabalhando com um conjunto de dados relativamente definido, tem certeza de que h\u00e1 \u00edndices nas colunas, sabe como parametrizar as consultas e testou os dados, talvez fazendo com consultas de banco de dados s\u00e3o o caminho a percorrer.<\/p>\n<p>E se for esse o caso, existem algumas maneiras de ignorar os padr\u00f5es de codifica\u00e7\u00e3o sem que o PHP CodeSniffer grite com voc\u00ea. \ud83d\ude42<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Embora os padr\u00f5es de codifica\u00e7\u00e3o do WordPress n\u00e3o gostem, consultas diretas ao banco de dados ocasionalmente s\u00e3o a melhor op\u00e7\u00e3o sob certas condi\u00e7\u00f5es.<\/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":[898,722,846,867],"tags":[1170],"class_list":["post-229297","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-2","category-desenvolvedor","category-tutoriais","category-wordpress-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/229297","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/comments?post=229297"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/229297\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/223796"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=229297"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=229297"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=229297"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}