{"id":229153,"date":"2022-10-29T19:18:00","date_gmt":"2022-10-29T16:18:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229153"},"modified":"2022-11-09T05:44:32","modified_gmt":"2022-11-09T02:44:32","slug":"requetes-directes-de-base-de-donnees-dans-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/requetes-directes-de-base-de-donnees-dans-wordpress\/","title":{"rendered":"Requ\u00eates directes de base de donn\u00e9es dans WordPress"},"content":{"rendered":"\n<p>Si vous revenez sur l&rsquo;un des messages que j&rsquo;ai \u00e9crits au cours des deux derni\u00e8res ann\u00e9es, par exemple, vous me trouverez probablement en train de pr\u00e9coniser l&rsquo;utilisation des API disponibles sur les requ\u00eates de base de donn\u00e9es d&rsquo;annuaire presque \u00e0 chaque fois.<\/p>\n<p>Et la v\u00e9rit\u00e9 est que je penche toujours dans cette direction. Autrement dit, s&rsquo;il existe une abstraction ou une API disponible pour faire quelque chose de sp\u00e9cifique, j&rsquo;essaie de l&rsquo;utiliser.<\/p>\n<p>Mais dans quelques projets r\u00e9cents, j&rsquo;ai travaill\u00e9 avec des ensembles de donn\u00e9es relativement volumineux (importants par rapport aux ensembles de donn\u00e9es non professionnels). Et ce faisant, j&rsquo;ai essay\u00e9 de faire en sorte que les mises \u00e0 jour des donn\u00e9es soient aussi rapides que possible.<\/p>\n<p>Dans des situations comme celle-ci, bien que les <a href=\"https:\/\/tommcfarlin.com\/following-the-wordpress-coding-standards\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">normes de codage WordPress<\/a> ne l&rsquo; aiment pas, je trouve parfois que les requ\u00eates directes dans la base de donn\u00e9es sont la meilleure option pour le faire dans certaines conditions.<\/p>\n<h2>Utilisation de requ\u00eates directes de base de donn\u00e9es<\/h2>\n<p>Les requ\u00eates directes de base de donn\u00e9es font partie de ces choses qui ont une r\u00e9putation un peu mitig\u00e9e parmi les d\u00e9veloppeurs WordPress :<\/p>\n<ul>\n<li>ils sont d\u00e9courag\u00e9s dans les normes de codage,<\/li>\n<li>WordPress offre un acc\u00e8s direct \u00e0 la base de donn\u00e9es via $wpdb,<\/li>\n<li>il y a des nuances dans les requ\u00eates de base de donn\u00e9es qui doivent \u00eatre comprises.<\/li>\n<\/ul>\n<p>Alors quand tu vois quelque chose <a href=\"https:\/\/gist.github.com\/tommcfarlin\/cdc5a95834e8bf581fc8ac65fad6ce20\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">comme \u00e7a<\/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>Comment savoir si c&rsquo;est un bon coup ou pas? Et mieux encore, comment savoir si vous devez utiliser des requ\u00eates de base de donn\u00e9es d&rsquo;annuaire dans votre propre code\u00a0?<\/p>\n<p>Il y a quelques questions que je me pose normalement lorsque je les traite, toutes partag\u00e9es ci-dessous.<\/p>\n<h3>1 Y a-t-il des index sur les colonnes\u00a0?<\/h3>\n<p>Avant d&rsquo;utiliser des requ\u00eates directes de base de donn\u00e9es dans WordPress, il faut v\u00e9rifier si les colonnes que j&rsquo;interroge ont des index sur lesdites colonnes.<\/p>\n<p>Et <a href=\"https:\/\/en.wikipedia.org\/wiki\/Database_index\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">la raison est celle-ci<\/a> :<\/p>\n<blockquote>\n<p>Les index sont utilis\u00e9s pour localiser rapidement les donn\u00e9es sans avoir \u00e0 rechercher chaque ligne dans une table de base de donn\u00e9es \u00e0 chaque acc\u00e8s \u00e0 une table de base de donn\u00e9es.<\/p>\n<\/blockquote>\n<p>L&rsquo;essentiel est que la vitesse \u00e0 laquelle vous pouvez interroger et mettre \u00e0 jour les colonnes est plus rapide s&rsquo;il existe des index sur les colonnes.<\/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=\"Requ\u00eates directes de base de donn\u00e9es dans WordPress\" ><\/a><\/p>\n<p>Les requ\u00eates directes de base de donn\u00e9es d\u00e9pendent de la structure de la base de donn\u00e9es.<\/p>\n<p>\u00c0 cette fin, ce n&rsquo;est pas quelque chose que nous devrions faire tout le temps. Mais il y a des moments o\u00f9 c&rsquo;est appropri\u00e9 (comme lorsque vous mettez \u00e0 jour un ensemble de m\u00e9ta-valeurs) et quand ce n&rsquo;est pas le cas.<\/p>\n<h3>2 Param\u00e9trez vos requ\u00eates<\/h3>\n<p>Lorsque vous utilisez des requ\u00eates directes de base de donn\u00e9es, il est extr\u00eamement important de param\u00e9trer vos requ\u00eates pour des raisons de s\u00e9curit\u00e9. Vous pouvez tout lire \u00e0 ce sujet <a href=\"https:\/\/codex.wordpress.org\/Data_Validation#Database\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dans le Codex<\/a>, et ce n&rsquo;est pas quelque chose \u00e0 ignorer.<\/p>\n<p>Directement <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/wpdb#Parameters\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">de la documentation<\/a> :<\/p>\n<blockquote>\n<p>Pour un aper\u00e7u plus complet de l&rsquo;\u00e9chappement SQL dans WordPress, consultez Validation des donn\u00e9es de la base de donn\u00e9es. C&rsquo;est une lecture incontournable pour tous les contributeurs de code WordPress et les auteurs de plugins.<\/p>\n<\/blockquote>\n<p>Autrement dit, si vous prenez des entr\u00e9es d&rsquo;utilisateurs, vous devez vous assurer qu&rsquo;elles sont nettoy\u00e9es, propres et pr\u00eates \u00e0 \u00eatre ins\u00e9r\u00e9es dans la base de donn\u00e9es. Mais, pour ce que \u00e7a vaut, je n&rsquo;autorise presque jamais la saisie de l&rsquo;utilisateur \u00e0 avoir un impact sur les requ\u00eates directes de la base de donn\u00e9es.<\/p>\n<p>Au lieu de cela, ils sont normalement bas\u00e9s sur des donn\u00e9es que j&rsquo;ai dans le code et que je souhaite mettre \u00e0 jour ou modifier lorsqu&rsquo;ils sont en toute s\u00e9curit\u00e9 dans le domaine de contr\u00f4le de la base de code.<\/p>\n<h3>3 Testez-les et testez-les \u00e0 nouveau<\/h3>\n<p>Et enfin, avant d&rsquo;impl\u00e9menter des requ\u00eates directes, je recommande\u00a0:<\/p>\n<ol>\n<li>D\u00e9marrage de votre front-end SQL et ex\u00e9cution des requ\u00eates,<\/li>\n<li>Notez toutes les erreurs qu&rsquo;ils peuvent lancer,<\/li>\n<li>Corrigez-les et r\u00e9essayez.<\/li>\n<\/ol>\n<p>Ensuite, une fois que vous avez un test de requ\u00eate fonctionnel pour les cas extr\u00eames pour vous assurer que quelque chose ne va pas \u00eatre mutil\u00e9. Cela est particuli\u00e8rement vrai si vous allez utiliser des clauses LIKE dans vos requ\u00eates (ce qui est probablement un article en soi).<\/p>\n<h2>Me manque-t-il une API\u00a0?<\/h2>\n<p>Avec la taille de l&rsquo;API de WordPress, il y a toujours une chance que je manque quelque chose, que je n\u00e9glige quelque chose ou que je ne sois tout simplement pas intelligent avec les API existantes.<\/p>\n<p>Et si tel est le cas, je me ferai un plaisir de corriger les informations ci-dessus (n&rsquo;h\u00e9sitez donc pas \u00e0 laisser un commentaire).<\/p>\n<p>Mais en attendant, si vous travaillez avec une donn\u00e9e relativement d\u00e9finie, vous \u00eates s\u00fbr qu&rsquo;il y a des index sur les colonnes, vous savez comment param\u00e9trer les requ\u00eates, et vous avez test\u00e9 les donn\u00e9es, puis peut-\u00eatre faire avec direct les requ\u00eates de base de donn\u00e9es sont la voie \u00e0 suivre.<\/p>\n<p>Et si tel est le cas, il existe plusieurs fa\u00e7ons d&rsquo;ignorer les normes de codage sans que PHP CodeSniffer ne vous crie dessus. \ud83d\ude42<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bien que les normes de codage WordPress ne l&rsquo;aiment pas, les requ\u00eates directes de base de donn\u00e9es sont parfois la meilleure option dans certaines conditions.<\/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":[893,717,841,862],"tags":[1167],"class_list":["post-229153","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-code-2","category-developpeur","category-tutoriels","category-wordpress-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/229153","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=229153"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/229153\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/223796"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=229153"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=229153"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=229153"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}