使用SQL将新用户和usermeta添加到数据库中

时间:2015-11-14 00:35:03

标签: php mysql database wordpress

我使用它在WordPress数据库中创建一个新用户......

// Add user to WP users table.
$user_table_name = $wpdb->prefix . "users";
$unique_string = substr(md5(rand(0, 1000000)), 0, 10);
$wpdb->insert( $user_table_name, array( 
    'user_login'        => sanitize_text_field($_POST['email']),
    'user_pass'         => sanitize_text_field(MD5($unique_string)),
    'user_email'        => sanitize_text_field($_POST['email']),
    'user_registered'   => sanitize_text_field(date("Y-n-d G:i:s")),
    'user_status'       => $_POST['1'],
    'display_name'      => sanitize_text_field($_POST['first_name']) . " " . sanitize_text_field($_POST['last_name'])
) );

...工作正常,让我们假装该用户的 ID 在数据库表格中为 1234 (由于自动增量)。< / p>

所以现在我还需要将相应的用户元信息添加到该用户的 usermeta 表中,这是我有点困惑的地方。

上面的代码很简单,因为它只是向表中添加一行。但是usermeta表是不同的,因为它需要 - 在这种情况下 - 一堆行,其中 user_ID 1234 分别为:

  • 昵称(我将使用此电子邮件地址)
  • wp_capabilities(值为 a:1:{s:10:“subscriber”; b:1;}
  • 销售(我拥有的自定义字段 - 值将设置为“”一词)
  • 颜色(我有另一个自定义字段 - 值将设置为“绿色”字样)

我猜测SQL语句将与本文开头的语句类似。

如果有人能告诉我,那就太棒了。

更新

所以这主要是完成的。这有效:

// Add corresponding user metadata to WP users table.
$usermeta_table_name = $wpdb->prefix . "usermeta";
$last_id = $wpdb->insert_id;
$role = sanitize_text_field('a:1:{s:10:"subscriber";b:1;}');

$wpdb->query( 
$wpdb->prepare( 
    "
     INSERT INTO $usermeta_table_name (
         `umeta_id`, 
         `user_id`,
         `meta_key`, 
         `meta_value` ) 
     VALUES (
         NULL,
         $last_id, 
         $usermeta_table_name . 'capabilities',
         '$role' )
    ",
        $last_id, $last_id 
    )
);

这会在 usermeta 表中添加一行,但如何在同一个语句中再添加2行呢?

2 个答案:

答案 0 :(得分:0)

将最后插入的行的ID存储到变量中:

$last_id = $wpdb->insert_id;

现在,使用此$last_id变量进行元数据插入。 insert_id变量由wpdb类提供。

答案 1 :(得分:0)

好的,所以我对此感到有些愚蠢 - 尽管公平地说,自从我编写任何SQL以来已经很长时间了: - )

答案只是遵循这种方法:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);