it-swarm.com.de

Einfügen von Daten in eine benutzerdefinierte Tabelle über ein Plugin

Ich habe ein Plugin, das Daten aus einer hochgeladenen Datei liest und Abfragen in der WP-Datenbank ausführt. Diese Einfügungen befinden sich in einer Tabelle, die von meinem Plugin erstellt wurde. Sie sind also nicht der Beitragstyp.

So habe ich es geschafft:

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

Das Problem dabei ist, dass ich diese Variablen ( $ db_Host, $ db_user, $ db_pass, $ db_name ) im Quellcode des Plugins deklarieren muss.

Kann ich mit der WP-API Daten in meine benutzerdefinierten Tabellen einfügen? Oder gibt es eine Möglichkeit, diese Variablen aus einer externen Datei abzurufen, die ich in einem Versionskontroll-Setup ignorieren kann?

5
Breno

Dies ist keine gute Vorgehensweise, wenn Sie versuchen, die Datenbank mit Ihren eigenen Methoden zu verbinden, während WP dies zunächst für Sie erledigt.


Das Problem dabei ist, dass ich diese Variablen ($ db_Host, $ db_user, $ db_pass, $ db_name) im Quellcode des Plugins deklarieren muss.

Alle diese Eigenschaften werden in der Datei wp-config.php definiert, die sich im Stammverzeichnis befindet.

Wenn Sie diese Konstanten dann erhalten sollten, schließen Sie einfach die Datei ein und rufen Sie die Konstanten auf, oder verwenden Sie REGEX (besser REGEX, da es andere Rückrufe geben könnte, die das Laden von WordPress erfordern).

// 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
);

Hier ist eine bessere Lösung:

WordPress laden

require( '/wp-blog-header.php' ); Sie sollten einen Arbeitspfad für diese Datei angeben!

Um zu testen, ob Sie WordPress erfolgreich geladen haben, geben Sie etwas aus:

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

Jetzt benutze WordPress DB API

Zum Einfügen von Daten gibt es diesen wpdb::insert , den Sie verwenden sollten. Hier die Syntax

$wpdb->insert( $table, $data, $format ); und Beispielgebrauch:

$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;

In diesem Beispiel ist das Array im 2. Parameter von $wpdb->insert ein Array mit Indizes als Spaltennamen und Werten, die für diese Spalten in einen unabhängigen Datensatz eingefügt werden sollen. Sie können die ID mit $wpdb->insert_id abrufen, der die letzte Datensatzeinfüge-ID in dieser Tabelle erhält.

Ich hoffe, das hilft, wenn Sie sich zumindest mit $wpdb::insert oder vorbereiteten Anweisungen anstelle von direkten Abfragen von SQL-Injection fernhalten.

6
Samuel Elh

Warum nicht lernen, wie $ wpdb funktioniert? Besuchen Sie https://codex.wordpress.org/Class_Reference/wpdb

Hier ist ein Beispiel, wie Daten mit $ wpdb in die Datenbank eingefügt werden.

<?php
  global $wpdb;

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

Besuchen Sie https://codex.wordpress.org/Creating_Tables_with_Plugins für weitere Informationen.

3
Sabbir Hasan