{"id":230760,"date":"2022-12-08T13:09:00","date_gmt":"2022-12-08T10:09:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230760"},"modified":"2022-12-07T11:53:24","modified_gmt":"2022-12-07T08:53:24","slug":"un-stub-pour-travailler-avec-des-requetes-de-base-de-donnees-dans-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/un-stub-pour-travailler-avec-des-requetes-de-base-de-donnees-dans-wordpress\/","title":{"rendered":"Un stub pour travailler avec des requ\u00eates de base de donn\u00e9es dans WordPress"},"content":{"rendered":"\n<p>Autant je suis fan de certaines API WordPress pour interroger la base de donn\u00e9es telles que :<\/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_Requ\u00eate<\/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>etc<\/li>\n<\/ul>\n<p>Je suis \u00e9galement fan d&rsquo;interroger directement la base de donn\u00e9es en cas de besoin.<\/p>\n<p>Comme vous le remarquerez, je proc\u00e8de de mani\u00e8re coh\u00e9rente et comme il y a des moments o\u00f9 je le fais plus fr\u00e9quemment, ces derniers temps, voici un format de base pour travailler avec des requ\u00eates de base de donn\u00e9es dans WordPress.<\/p>\n<p>Si je fais cela, cependant, il y a g\u00e9n\u00e9ralement des choses que je garde \u00e0 l&rsquo;esprit\u00a0:<\/p>\n<ol>\n<li>assurez-vous toujours que la requ\u00eate est param\u00e9tr\u00e9e (surtout dans le cas d&rsquo;une saisie utilisateur),<\/li>\n<li>renvoie dans les informations sous la forme d&rsquo;un tableau associatif.<\/li>\n<\/ol>\n<p>Le premier cas est pour la s\u00e9curit\u00e9; le second est plus ou moins pratique pour simplifier l&rsquo;it\u00e9ration dans les donn\u00e9es via les fonctions de tableau PHP.<\/p>\n<h2>Requ\u00eates de base de donn\u00e9es dans WordPress<\/h2>\n<p>Tout d&rsquo;abord, il est important de comprendre deux concepts\u00a0:<\/p>\n<ol>\n<li>param\u00e9trage,<\/li>\n<li>array_column<\/li>\n<\/ol>\n<p>Celles-ci sont au c\u0153ur de la fa\u00e7on dont je r\u00e9dige mes requ\u00eates et travaille avec les r\u00e9sultats de celles-ci.<\/p>\n<h3>1 Param\u00e9trage<\/h3>\n<p>Vous pouvez en savoir plus \u00e0 ce sujet dans le Codex, mais la param\u00e9trisation est un moyen qui nous permet d&rsquo;\u00e9crire des requ\u00eates qui fonctionnent pour emp\u00eacher l&rsquo;injection 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\">De la page Codex<\/a><\/strong> :<\/p>\n<blockquote>\n<p>Toutes les donn\u00e9es des requ\u00eates SQL doivent \u00eatre \u00e9chapp\u00e9es par SQL avant que la requ\u00eate SQL ne soit ex\u00e9cut\u00e9e pour se pr\u00e9munir contre les attaques par injection SQL. La <code>prepare<\/code>m\u00e9thode ex\u00e9cute cette fonctionnalit\u00e9 pour WordPress, qui prend en charge \u00e0 la fois une syntaxe de type sprintf( <a href=\"https:\/\/php.net\/sprintf\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">)<\/a> et <a href=\"https:\/\/php.net\/vsprintf\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">vsprintf()<\/a>.<\/p>\n<\/blockquote>\n<p>C&rsquo;est-\u00e0-dire que la m\u00e9thode prend en charge les jetons tels que <strong>%s<\/strong>, <strong>%d<\/strong> et <strong>%f<\/strong> lors de la transmission d&rsquo;informations dans la requ\u00eate. Je montrerai un exemple de cela plus tard dans le post.<\/p>\n<h3>2 Travailler avec des colonnes de tableau<\/h3>\n<p>Les r\u00e9sultats de ces requ\u00eates peuvent \u00eatre renvoy\u00e9s de diff\u00e9rentes mani\u00e8res. \u00c0 savoir, en tant qu&rsquo;objet, tableau index\u00e9 num\u00e9riquement ou tableau associatif. Le plus souvent, j&rsquo;aime utiliser des tableaux (et je montrerai comment faire cela dans WordPress plus tard dans cet article).<\/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=\"Un stub pour travailler avec des requ\u00eates de base de donn\u00e9es dans WordPress\" ><\/a><\/p>\n<p>La raison, cependant, est que je peux profiter de <a href=\"https:\/\/php.net\/manual\/en\/function.array-column.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">array_column<\/a>. Du manuel PHP\u00a0:<\/p>\n<blockquote>\n<p>array_column() renvoie les valeurs d&rsquo;une seule colonne de l&rsquo;entr\u00e9e, identifi\u00e9e par la column_key. Facultativement, un index_key peut \u00eatre fourni pour indexer les valeurs dans le tableau renvoy\u00e9 par les valeurs de la colonne index_key du tableau d&rsquo;entr\u00e9e.<\/p>\n<\/blockquote>\n<p>Cela signifie que si vous avez un tableau et qu&rsquo;il a un tas de r\u00e9sultats dont chacun a la m\u00eame colonne, vous pouvez facilement simplement les informations en passant le tableau dans une m\u00e9thode, puis en passant le nom de la colonne dans une m\u00e9thode.<\/p>\n<p>Le r\u00e9sultat? Un tableau index\u00e9 num\u00e9riquement des valeurs. Cela facilite grandement l&rsquo;it\u00e9ration des donn\u00e9es via <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> en utilisant <strong><a href=\"https:\/\/php.net\/manual\/en\/control-structures.for.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">for<\/a><\/strong> ou en utilisant <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>Un stub pour interroger la base de donn\u00e9es<\/h2>\n<p>Avec cette justification en place, <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/83522e41b58ba2ee8633282cb03e6a60#file-00-query-stub-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">voici le stub<\/a><\/strong> que j&rsquo;utilise normalement chaque fois que je travaille directement avec des requ\u00eates de base de donn\u00e9es\u00a0:<\/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>Et voici un exemple avec quelques informations diff\u00e9rentes pour que vous puissiez voir <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/83522e41b58ba2ee8633282cb03e6a60#file-01-example-query-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">comment cela fonctionne<\/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>Interroger la table <strong>wp_user_meta<\/strong> peut sembler idiot puisque get_user_meta est une fonction API valide, mais je pensais que ce serait une requ\u00eate facile \u00e0 comprendre \u00e9tant donn\u00e9 ce que j&rsquo;essaie d&rsquo;expliquer dans le pass\u00e9.<\/p>\n<p>Quoi qu&rsquo;il en soit, je ne peux pas fournir la requ\u00eate ni g\u00e9rer le cas o\u00f9 les r\u00e9sultats peuvent revenir avec plusieurs colonnes (dans ce cas, vous devrez travailler avec quelque chose de diff\u00e9rent de <strong>array_map<\/strong>, mais cela devrait \u00eatre assez facile, non? )<\/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>Il existe une mani\u00e8re coh\u00e9rente d&rsquo;interroger la base de donn\u00e9es WordPress. Comme il y a des moments o\u00f9 je le fais plus fr\u00e9quemment, ces derniers temps, voici un format de base pour travailler avec des requ\u00eates de base de donn\u00e9es dans 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":[893,717,841,862],"tags":[1167],"class_list":["post-230760","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\/230760","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=230760"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/230760\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/235713"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=230760"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=230760"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=230760"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}