web-dev-qa-db-ja.com

プラグインを介してデータをカスタムテーブルに正しく挿入する方法

私はアップロードされたファイルからデータを読み込み、WPデータベース上でクエリを実行するプラグインを持っています。これらの挿入は私のプラグインによって作成されたテーブルの中にあるので、それらは投稿タイプではありません。

これは私がそれを動かした方法です:

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

これの問題は、私がプラグインのソースコードの中でこれらの変数( $ db_Host、$ db_user、$ db_pass、$ db_name )を宣言しなければならないことです。

Wp apiを使ってカスタムテーブルにデータを挿入する方法はありますか?それとも、バージョン管理の設定で無視できる外部ファイルからこれらの変数を引き出すことができる方法はありますか?

5
Breno

WPが最初にあなたのためにそれをしている間あなた自身の方法でDBを接続しようとするのは良い習慣ではありません。


これの問題は、私がプラグインのソースコードの中でこれらの変数($ db_Host、$ db_user、$ db_pass、$ db_name)を宣言しなければならないということです。

これらすべてのプロパティは、ルート領域にあるwp-config.phpファイルで定義されています。

これらの定数を取得する場合は、ファイルをインクルードして定数を呼び出すか、REGEXを使用してください(WordPressのロードを必要とする他のコールバックがあるため、REGEXを使用してください)

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

これがより良い解決策です。

WordPressをロード

require( '/wp-blog-header.php' );あなたはそのファイルへの作業パスを提供するべきです!

WordPressを正常にロードしたかどうかをテストするには、何かをダンプします。

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

今WordPress DB APIを使う

データを挿入するには、これがあります wpdb::insert あなたが使うべきです。ここに構文

$wpdb->insert( $table, $data, $format );と使用例:

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

この例では、$wpdb->insertの2番目のパラメータの配列は、列名としてインデックスを持つ配列であり、最後のレコードのIDを取得する$wpdb->insert_idを使用してIDを取得できる独立したレコードの列に挿入する値です。

少なくとも直接の問い合わせの代わりに$wpdb::insertやプリペアドステートメントを使ったSQLインジェクションから離れていれば、それが助けになることを願っています。

6
Samuel Elh

$ wpdb がどのように機能するのか調べないでください。 https://codex.wordpress.org/Class_Reference/wpdb にアクセスしてください。

$ wpdb を使用してデータベースにデータを挿入する方法の例を示します。

<?php
  global $wpdb;

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

詳しくは https://codex.wordpress.org/Creating_Tables_with_Plugins をご覧ください。

3
Sabbir Hasan