だから私はテーブル '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')")
$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')")
あなたが投稿したクエリでは、カラム名は文字列ではいけません。
$ 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 );
}
これも動作します
$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
);