複数の行を挿入するために$wpdb->insert
を使用する方法これが私のコードです。
for($i=0; $i<=$urlCount; $i++) {
$stat = $wpdb->insert(
'WP_URLS',
array(
'POSTID' => $post->ID,
'URL' => $_POST['url'.$i]
)
);
}
このコードは最初の挿入に対してのみ機能します(すなわち、$i = 0
の場合、valueがurl_0
の場合)。 URL数が100を超えることもあれば、ゼロになることもあります。そのため、100回コードを書くのではなく、任意の数のレコードに対して機能する単純なループを作成したいだけです。私がループした理由はそれだけです。
お手伝いありがとう。
テーブル構造は
CREATE TABLE WP_URLS (
POSTID BIGINT NOT NULL,
URL VARCHAR(254)
);
問題はかなり単純なものだと思います。コード全体を見せたわけではありませんが、問題は、何らかの理由で挿入をstring
として$stat
という名前のvarに保存していることにあると思います。 varに新しいクエリを入力するたびに、varが上書きされます。代わりに$stat .= $wpdb->insert( ...etc... )
を使うべきです。あなたの文字列に追加する。 varを空の文字列 before ループに設定することを忘れないでください。したがって、$stat = ''
を追加できます。
もう1つの方法 - より良い方法 - 配列を使用することです。理由:コードを簡単にデバッグできます。そしてplsはコメントのI/Tコードを読みます。
$stats = array();
for( $i = 0; $i <= $urlCount; $i++ )
{
$stats[] = array(
'POSTID' => $post->ID,
// are you really retrieving **ALL** your urls as "url1", "url2", etc.
// via some $_POST-ed form?
'URL' => filter_var(
$_POST["url{$i}"],
FILTER_VALIDATE_URL,
FILTER_FLAG_SCHEME_REQUIRED
)
);
}
foreach ( $stats as $stat )
$wpdb->insert( 'WP_URLS', $stat );
受け入れられた答えがあっても、それは各挿入物のための別々のクエリで動作します。
これはたった一つの問い合わせにデータを挿入するためのより良い解決策になるでしょう。
/**
* A method for inserting multiple rows into the specified table
*
* Usage Example:
*
* $insert_arrays = array();
* foreach($assets as $asset) {
*
* $insert_arrays[] = array(
* 'type' => "multiple_row_insert",
* 'status' => 1,
* 'name'=>$asset,
* 'added_date' => current_time( 'mysql' ),
* 'last_update' => current_time( 'mysql' ));
*
* }
*
* wp_insert_rows($insert_arrays);
*
*
* @param array $row_arrays
* @param string $wp_table_name
* @return false|int
*
* @author Ugur Mirza ZEYREK
* @source http://stackoverflow.com/a/12374838/1194797
*/
function wp_insert_rows($row_arrays = array(), $wp_table_name) {
global $wpdb;
$wp_table_name = esc_sql($wp_table_name);
// Setup arrays for Actual Values, and Placeholders
$values = array();
$place_holders = array();
$query = "";
$query_columns = "";
$query .= "INSERT INTO {$wp_table_name} (";
foreach($row_arrays as $count => $row_array)
{
foreach($row_array as $key => $value) {
if($count == 0) {
if($query_columns) {
$query_columns .= ",".$key."";
} else {
$query_columns .= "".$key."";
}
}
$values[] = $value;
if(is_numeric($value)) {
if(isset($place_holders[$count])) {
$place_holders[$count] .= ", '%d'";
} else {
$place_holders[$count] .= "( '%d'";
}
} else {
if(isset($place_holders[$count])) {
$place_holders[$count] .= ", '%s'";
} else {
$place_holders[$count] .= "( '%s'";
}
}
}
// mind closing the GAP
$place_holders[$count] .= ")";
}
$query .= " $query_columns ) VALUES ";
$query .= implode(', ', $place_holders);
if($wpdb->query($wpdb->prepare($query, $values))){
return true;
} else {
return false;
}
}