{"id":228870,"date":"2022-10-29T19:55:00","date_gmt":"2022-10-29T16:55:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228870"},"modified":"2022-11-09T04:35:53","modified_gmt":"2022-11-09T01:35:53","slug":"consultas-directas-a-la-base-de-datos-en-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/consultas-directas-a-la-base-de-datos-en-wordpress\/","title":{"rendered":"Consultas directas a la base de datos en WordPress"},"content":{"rendered":"\n<p>Si repas\u00f3 alguna de las publicaciones que escrib\u00ed en los \u00faltimos, digamos, dos a\u00f1os, es probable que me encuentre defendiendo el uso de las API disponibles en lugar de las consultas de la base de datos del directorio casi todas las veces.<\/p>\n<p>Y la verdad es que todav\u00eda me inclino en esa direcci\u00f3n. Es decir, si hay una abstracci\u00f3n o una API que est\u00e1 disponible para hacer algo espec\u00edfico, entonces trato de usarla.<\/p>\n<p>Pero en un par de proyectos recientes, he estado trabajando con algunos conjuntos de datos relativamente grandes (grandes en comparaci\u00f3n con conjuntos de datos de nivel no empresarial). Y al hacerlo, he tratado de asegurarme de que las actualizaciones de los datos sean lo m\u00e1s r\u00e1pidas posible.<\/p>\n<p>En situaciones como esta, aunque a los <a href=\"https:\/\/tommcfarlin.com\/following-the-wordpress-coding-standards\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Est\u00e1ndares de codificaci\u00f3n de WordPress<\/a> no les gusta, encuentro que las consultas directas a la base de datos ocasionalmente son la mejor opci\u00f3n para hacerlo bajo ciertas condiciones.<\/p>\n<h2>Uso de consultas directas a la base de datos<\/h2>\n<p>Las consultas directas a la base de datos son una de esas cosas que tienen una reputaci\u00f3n mixta entre los desarrolladores de WordPress:<\/p>\n<ul>\n<li>se desaconsejan en los est\u00e1ndares de codificaci\u00f3n,<\/li>\n<li>WordPress ofrece acceso directo a la base de datos a trav\u00e9s de $wpdb,<\/li>\n<li>Hay matices en las consultas de la base de datos que deben entenderse.<\/li>\n<\/ul>\n<p>As\u00ed que cuando veas algo <a href=\"https:\/\/gist.github.com\/tommcfarlin\/cdc5a95834e8bf581fc8ac65fad6ce20\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">como esto<\/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>\u00bfC\u00f3mo saber si es un buen movimiento o no? Y mejor a\u00fan, \u00bfc\u00f3mo sabe si debe usar consultas de bases de datos de directorio en su propio c\u00f3digo?<\/p>\n<p>Hay algunas preguntas que normalmente me hago cuando trato con ellas, todas las cuales se comparten a continuaci\u00f3n.<\/p>\n<h3>1 \u00bfHay \u00edndices en las columnas?<\/h3>\n<p>Antes de usar consultas directas a la base de datos en WordPress es verificar si las columnas que estoy consultando tienen \u00edndices en dichas columnas.<\/p>\n<p>Y <a href=\"https:\/\/en.wikipedia.org\/wiki\/Database_index\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">el motivo es este<\/a> :<\/p>\n<blockquote>\n<p>Los \u00edndices se utilizan para localizar datos r\u00e1pidamente sin tener que buscar en cada fila de una tabla de base de datos cada vez que se accede a una tabla de base de datos.<\/p>\n<\/blockquote>\n<p>La conclusi\u00f3n es que la velocidad a la que puede consultar y actualizar columnas es m\u00e1s r\u00e1pida si hay \u00edndices en las columnas.<\/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 directas a la base de datos en WordPress\" ><\/a><\/p>\n<p>Las consultas directas a la base de datos dependen de la estructura de la base de datos.<\/p>\n<p>Con ese fin, esto no es algo que debamos hacer todo el tiempo. Pero hay momentos en los que es apropiado (como cuando est\u00e1 actualizando un conjunto de valores meta) y cuando no lo es.<\/p>\n<h3>2 Parametriza tus consultas<\/h3>\n<p>Cuando se utilizan consultas directas a la base de datos, es extremadamente importante parametrizar sus consultas por motivos de seguridad. Puede leer todo sobre esto <a href=\"https:\/\/codex.wordpress.org\/Data_Validation#Database\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">en el Codex<\/a>, y esto no es algo que se deba omitir.<\/p>\n<p>Directamente <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/wpdb#Parameters\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">de la documentaci\u00f3n<\/a> :<\/p>\n<blockquote>\n<p>Para obtener una descripci\u00f3n m\u00e1s completa del escape de SQL en WordPress, consulte Validaci\u00f3n de datos de la base de datos. Es una lectura obligada para todos los contribuyentes de c\u00f3digo de WordPress y autores de complementos.<\/p>\n<\/blockquote>\n<p>Es decir, si est\u00e1 tomando la entrada del usuario, debe asegurarse de que est\u00e9 desinfectada, limpia y lista para insertarse en la base de datos. Pero, por lo que vale, casi nunca permito que la entrada del usuario afecte las consultas directas de la base de datos.<\/p>\n<p>En su lugar, normalmente se basan en datos que tengo en el c\u00f3digo y quiero actualizar o modificar cuando est\u00e1n seguros dentro del \u00e1mbito de control de la base de c\u00f3digo.<\/p>\n<h3>3 Pru\u00e9belos y vuelva a probarlos<\/h3>\n<p>Y por \u00faltimo, antes de implementar cualquier consulta directa, recomiendo:<\/p>\n<ol>\n<li>Iniciando su front-end SQL y ejecutando las consultas,<\/li>\n<li>Tenga en cuenta cualquier error que puedan arrojar,<\/li>\n<li>Corr\u00edgelos y vuelve a intentarlos.<\/li>\n<\/ol>\n<p>Luego, una vez que tenga una consulta de trabajo, pruebe los casos extremos para asegurarse de que algo no se va a alterar. Esto es especialmente cierto si va a utilizar cl\u00e1usulas LIKE en sus consultas (lo que probablemente sea un art\u00edculo en s\u00ed mismo).<\/p>\n<h2>\u00bfMe estoy perdiendo una API?<\/h2>\n<p>Con el tama\u00f1o de la API de WordPress, siempre existe la posibilidad de que me est\u00e9 perdiendo algo, est\u00e9 descuidando algo o simplemente no est\u00e9 siendo inteligente con las API existentes.<\/p>\n<p>Y si ese es el caso, con gusto corregir\u00e9 la informaci\u00f3n anterior (as\u00ed que no dude en dejar un comentario).<\/p>\n<p>Pero mientras tanto, si est\u00e1 trabajando con una parte de datos relativamente establecida, est\u00e1 seguro de que hay \u00edndices en las columnas, sabe c\u00f3mo parametrizar las consultas y ha probado los datos, entonces tal vez haciendo con directo consultas de base de datos son el camino a seguir.<\/p>\n<p>Y si ese es el caso, hay algunas formas de ignorar los est\u00e1ndares de codificaci\u00f3n sin que PHP CodeSniffer le grite. \ud83d\ude42<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Aunque a los est\u00e1ndares de codificaci\u00f3n de WordPress no les gusta, las consultas directas a la base de datos ocasionalmente son la mejor opci\u00f3n bajo ciertas condiciones.<\/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":[892,716,840,861],"tags":[1172],"class_list":["post-228870","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo","category-desarrollador","category-tutoriales","category-wordpress-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/228870","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=228870"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/228870\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/223796"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=228870"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=228870"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=228870"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}