$wpdb->插入-插入多行

时间:2011-09-02 作者:Albin Joseph

如何使用$wpdb->insert 插入多行。这是我的密码。

for($i=0; $i<=$urlCount; $i++) {
   $stat = $wpdb->insert(
        \'WP_URLS\',
        array(
            \'POSTID\' => $post->ID,
            \'URL\' =>   $_POST[\'url\'.$i]
        )
    );
}
此代码仅适用于第一次插入(即$i = 0 , 当值url_0)。有时URL计数将超过100,有时则为零。因此,我不想写100次代码,只想有一个简单的循环,可以处理任意数量的记录。这就是我选择循环的原因。

谢谢你的帮助。

表结构为

CREATE TABLE WP_URLS (
   POSTID BIGINT NOT NULL,
   URL VARCHAR(254)
);

2 个回复
最合适的回答,由SO网友:kaiser 整理而成

我想问题很简单。您没有显示整个代码,但我想问题是您出于某种未知原因将插入保存为string 到名为$stat. 每次用新查询填充var时,都会覆盖var。您应该使用$stat .= $wpdb->insert( ...etc... ) 相反附加到字符串。不要忘记在循环之前将var设置为空字符串,以便可以附加:$stat = \'\'.

另一种更好的方法是使用数组。原因:您可以更轻松地调试代码。请阅读评论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 );

SO网友:mirza

即使有一个可接受的答案,它也可以为每个插入使用单独的查询。

对于仅在一个查询中插入数据而言,这可能是一个更好的解决方案:

<?php
 
    
    /**
     * 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
        $place_holders = [];
        $row = implode(\', \', array_keys($row_arrays));
        $values = array_values($row_arrays);

        foreach (array_values($row_arrays) as $key => $param) {
        
            if(is_numeric($param)) {
                if($key == 0){
                    array_push($place_holders, " \'%d\'");
                } else {
                    array_push($place_holders, ", \'%d\'");
                }
                
            } else {
                if($key == 0){
                    array_push($place_holders, " \'%s\'");
                } else {
                    array_push($place_holders, ", \'%s\'");
                }
            }
        }

        $params = implode(\'\', $place_holders);
    
        $query = "INSERT INTO {$wp_table_name} (" . $row . ") VALUES (" . $params . ")";

        if($wpdb->query($wpdb->prepare($query, $values))){
            return true;
        } else {
            return false;
        }
    }
资料来源:https://github.com/mirzazeyrek/wp-multiple-insert

结束

相关推荐

Wpdb->Insert()不会在最后一行之后插入新行

在JavaScript中,我使用Ajax调用并发送一组商店除数组中的最后一个元素外,所有商店都已存在于数据库中<最后一个要素是新店铺<PHP代码应该获取数组并更新数据库中已经存在的所有商店,并在表的最后一行之后插入新的商店insert()插入最后一个店铺,但由于某些原因,它并不总是在表的最后一行之后插入插入参数包括除索引外的所有字段的值。该字段在DB中标记为auto\\u increment,实际上插入的行获得了预期的索引号但未按预期插入到最后一行之后<原因是什么?以下是php代码:fu