web-dev-qa-db-ja.com

wpdb->一度に複数のレコードを挿入

だから私はテーブル 'settings-table'を作成した後、それにレコードをいくつか追加したいと思います。

これは私がやりたい方法であり、最良の方法ではないので、テーブルにもっとレコードを追加するので、もっと良い方法が必要です。

実施例1

 $wpdb->insert('settings-table', array('option_name'   => 'name-1', 
                                       'option_value'  => 'val-1', 
                                       'option_created'=> current_time('mysql'),
                                       'option_edit'   => current_time('mysql'),
                                       'option_user'   => 'user-1' 
                                       ));    
 $wpdb->insert('settings-table', array('option_name'   => 'name-2', 
                                       'option_value'  => 'val-2', 
                                       'option_created'=> current_time('mysql'),
                                       'option_edit'   => current_time('mysql'),
                                       'option_user'   => 'user-2' 
                                       ));
 $wpdb->insert('settings-table', array('option_name'   => 'name-1', 
                                       'option_value'  => 'val-3', 
                                       'option_created'=> current_time('mysql'),
                                       'option_edit'   => current_time('mysql'),
                                       'option_user'   => 'user-3' 

更新

これはうまくいきます(他のより良い解決策は大歓迎です)

$wpdb->query("INSERT INTO settings-table
            (`option_name`, `option_value`, `option_created`, `option_edit`, `option_user`)
            VALUES
            ('name-1', 'val-1', current_time('mysql'), current_time('mysql'), 'user-1'),
            ('name-2', 'val-2', current_time('mysql'), current_time('mysql'), 'user-2'),
            ('name-3', 'val-3',  current_time('mysql'), current_time('mysql'), 'user-3')")
3
user759235
$wpdb->query("INSERT INTO settings-table
            (option_name, option_value, option_created, option_edit, option_user)
            VALUES
            ('name-1', 'val-1', current_time('mysql'), current_time('mysql'), 'user-1'),
            ('name-2', 'val-2', current_time('mysql'), current_time('mysql'), 'user-2'),
            ('name-3', 'val-3',  current_time('mysql'), current_time('mysql'), 'user-3')")

あなたが投稿したクエリでは、カラム名は文字列ではいけません。

4
rajesh

$ wpdb-> insert functionは、単一の関数呼び出しに挿入される複数のレコードをサポートしません。データをループして挿入するデータを準備してから、$ wpdb-> insertを使用してレコードを1つずつ挿入する必要があります。

代わりに、以下のように挿入クエリを準備して、クエリを1回だけ実行できます。

したがって、 100 recordsを挿入したい場合は、 100 insert query を使用する場合は $ wpdb-> insert を実行する必要があります。そして、次のようなコードを使用した場合、 1 insert query のみを実行する必要があります。

それが役立つことを願っています。

function do_insert($place_holders, $values) {

    global $wpdb;

    $query           = "INSERT INTO settings-table (`option_name`, `option_value`, `option_created`, `option_edit`, `option_user`) VALUES ";
    $query           .= implode( ', ', $place_holders );
    $sql             = $wpdb->prepare( "$query ", $values );

    if ( $wpdb->query( $sql ) ) {
        return true;
    } else {
        return false;
    }

}

$data_to_be_inserted = array( array(
    'option_name'   => 'name-1', 
    'option_value'  => 'val-1', 
    'option_created'=> current_time('mysql'),
    'option_edit'   => current_time('mysql'),
    'option_user'   => 'user-1' 
),

array(
    'option_name'   => 'name-2', 
    'option_value'  => 'val-2', 
    'option_created'=> current_time('mysql'),
    'option_edit'   => current_time('mysql'),
    'option_user'   => 'user-2' 
),
array(
    'option_name'   => 'name-1', 
    'option_value'  => 'val-3', 
    'option_created'=> current_time('mysql'),
    'option_edit'   => current_time('mysql'),
    'option_user'   => 'user-3'
));

$values = $place_holders = array();

if(count($data_to_be_inserted) > 0) {
    foreach($data_to_be_inserted as $data) {
        array_Push( $values, $data['option_name'], $data['option_value'], $data['option_created'], $data['option_edit'], $data['option_user']);
        $place_holders[] = "( %s, %s, %s, %s, %s)";
    }

    do_insert( $place_holders, $values );
}
1
user54858

これも動作します

        $nameArray = array("name-1", "name-2", "name-3");
        $valueArray = array("val-1", "val-2" , "val-3");
        $userArray = array("user-1" , "user-2", "user-3");
        $maxRow= count($nameArray); // can use count of any array
        $setting_values = array();
        $time = current_time('mysql');

        for($x=0;$x<$maxRow; $x++){
            $SettingContext = [
                'option_name' => "'" . $nameArray[$x] . "'",
                'option_value' => "'" . $valueArray[$x] . "'",
                'option_created' => "'" . $time . "'",
                'option_edit' => "'" . $time . "'",
                'option_user' => "'" . $userArray[$x] . "'"
            ];
            $setting_values[] = "(" . implode(',', $SettingContext) . ")";
        }
        $settingSubmit = implode(',', $setting_values);
        $setting_save = $wpdb->query("
                INSERT INTO setting
                (option_name, option_value, option_created,option_edit, option_user)
                VALUES " . $settingSubmit
        );
0
johnnitro