使用 $wpdb 数据库方法快速批次新增数据

写在前面,这篇我应该会列为每次建立针对 WordPress 数据库读写项目时,必用的方法!

$wpdb 这个数据库存取方法,官方文件有写使用手册

不过就是简单的「增删查改」 CRUD 四大方法介绍。 如果再细看「新增」的方法 insert( $table, $data, $format );

会发现除了基本指定 与外,还要指定 。 这实在有够麻烦,尤其是有些数据表有 20~30 个字段的话,那个型态就会写得很头痛。 想到就觉得不爽!

不过我相信有这困扰的人不只有我,果然 Google 一下发现有网友开源一个很棒的方法:

function wpdb_bulk_insert($table, $rows) {
    global $wpdb;

    // Extract column list from first row of data
    $columns = array_keys($rows[0]);
    asort($columns);
    $columnList = '`' . implode('`, `', $columns) . '`';

    // Start building SQL, initialise data and placeholder arrays
    $sql          = "INSERT INTO `$table` ($columnList) VALUES\n";
    $placeholders = array();
    $data         = array();

    // Build placeholders for each row, and add values to data array
    foreach ($rows as $row) {
        ksort($row);
        $rowPlaceholders = array();

        foreach ($row as $key => $value) {
            $data[]            = $value;
            $rowPlaceholders[] = is_numeric($value) ? '%d' : '%s';
        }

        $placeholders[] = '(' . implode(', ', $rowPlaceholders) . ')';
    }

    // Stitch all rows together
    $sql .= implode(",\n", $placeholders);
    // print_r($sql);
    // Run the query.  Returns number of affected rows.
    return $wpdb->query($wpdb->prepare($sql, $data));
}

这个方法包装了 ,解决了要输入 的困扰(尽管只是判断是数字还是字串,但要自己一个一个列真的痛苦)。

使用方式除了带入第一个参数外,第二个参数是要带入阵列的数据列。 意味着这方法也帮你做到了批次新增,一举两得的好方法啊啊啊啊啊~~~~

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注