web-dev-qa-db-fra.com

Comment insérer correctement des données dans une table personnalisée via un plugin

J'ai un plugin qui lit les données d'un fichier téléchargé et exécute des requêtes sur la base de données wp. Ces insertions sont dans une table créée par mon plugin, elles ne sont donc pas du type post.

Voici comment je l'ai fait fonctionner:

$connection = mysqli_connect($db_Host, $db_user, $db_pass, $db_name);
mysqli_query($connection, $query);

Le problème avec ceci est que je dois déclarer ces variables ( $ db_Host, $ db_user, $ db_pass, $ db_name ) dans le code source du plugin.

Est-il possible d'insérer des données dans mes tables personnalisées avec l'API wp? Ou est-il possible d'extraire ces variables d'un fichier externe que je peux ignorer dans une configuration de contrôle de version?

5
Breno

Ce n’est pas une bonne pratique d’essayer de connecter la base de données par vos propres méthodes pendant que WP le fait pour vous initialement.


Le problème avec ceci est que je dois déclarer ces variables ($ db_Host, $ db_user, $ db_pass, $ db_name) dans le code source du plugin.

Toutes ces propriétés sont définies dans le fichier wp-config.php, situé dans la zone racine.

Si vous deviez alors obtenir ces constantes, incluez simplement le fichier et appelez les constantes, ou utilisez REGEX (utilisez plutôt REGEX, car il se peut que d'autres rappels nécessitent le chargement de WordPress).

// loading the config file to pull the DB_* constants
$dirname = dirname(__FILE__);
$root = false !== mb_strpos( $dirname, 'wp-content' ) ? mb_substr( $dirname, 0, mb_strpos( $dirname, 'wp-content' ) ) : $dirname;
// if $root is not correct, provide a static path then, $root = '/path/to/root/dir'
// assuming constants are ready (wp is configured), let's get them.
require_once( $root . "wp-config.php" );
echo var_dump(
    'DB name', DB_NAME,
    'DB user', DB_USER,
    'DB password', DB_PASSWORD,
    'DB Host', DB_Host
);

Voici une meilleure solution:

Charger WordPress

require( '/wp-blog-header.php' ); Vous devez fournir un chemin de travail à ce fichier!

Pour vérifier si vous avez chargé WordPress avec succès, supprimez quelque chose:

add_action("wp", function() { 
    echo sprintf( "Yes! I am creating with WordPress v. %s!\n", get_bloginfo("version") );
    exit("I exits\n");
});

Maintenant, utilisez WordPress DB API

Pour insérer des données, vous devez utiliser wpdb::insert . Voici la syntaxe

$wpdb->insert( $table, $data, $format ); et exemple d'utilisation:

$wpdb->insert( 
    'messages', 
    array( 
        'PM_ID'     => (int) $pm_id,
        'sender'    => $current_user->ID,
        'recipient' => (int) $recipient,
        'message'   => "Hello!\n",
        'date'      => time()
    )
);
$record_id = $wpdb->insert_id;

Dans l'exemple, le tableau dans le deuxième paramètre de $wpdb->insert est un tableau avec des index comme noms de colonnes et les valeurs à insérer pour ces colonnes dans un enregistrement indépendant que vous pouvez obtenir avec son ID avec $wpdb->insert_id qui obtient le dernier ID d'insertion d'enregistrement de cette table.

J'espère que cela vous aidera si au moins vous restez loin de l'injection SQL en utilisant $wpdb::insert ou des instructions préparées au lieu de requêtes directes.

6
Samuel Elh

Pourquoi ne pas étudier comment $ wpdb fonctionne. Visitez https://codex.wordpress.org/Class_Reference/wpdb

Voici un exemple montrant comment insérer des données dans une base de données à l’aide de $ wpdb

<?php
  global $wpdb;

  $wpdb->insert( 
    'table_name_here', 
    array( 
        'column1' => 'value1', 
        'column2' => 123 
    ), 
    array( 
        '%s', 
        '%d' 
    ) 
 );
?>

Visitez https://codex.wordpress.org/Creating_Tables_with_Plugins pour plus d'informations.

3
Sabbir Hasan