如何将数组存储到数据库中

时间:2014-08-24 作者:user759235

我正在尝试将多行存储到数据库中。字段数将更改。下面是我用来存储一行的方法。

  <?php

  if(isset($_POST[\'save\'])){
      $wpdb->insert(\'wp_table_name\',
          array(
              \'field_a\' => $_POST[\'field_a\'],
              \'field_b\' => $_POST[\'field_b\'],
              \'field_c\' => $_POST[\'field_c\'],
              \'field_d\' => $_POST[\'field_d\']             
              ),
          array(
              \'%s\',
              \'%s\',
              \'%s\',
              \'%s\'
              )
          );
  }
  ?>

  <form>
      <input type="text" name="field_a[]"/>
      <input type="text" name="field_b[]"/>
      <input type="text" name="field_c[]"/>
      <input type="text" name="field_d[]"/>

      <input type="text" name="field_a[]"/>
      <input type="text" name="field_b[]"/>
      <input type="text" name="field_c[]"/>
      <input type="text" name="field_d[]"/>

      <input type="text" name="field_a[]"/>
      <input type="text" name="field_b[]"/>
      <input type="text" name="field_c[]"/>
      <input type="text" name="field_d[]"/>

      <button type="submit" name="save">Save</button>
  </form>

3 个回复
SO网友:Rarst

WP在某些上下文(如post字段)中对数组(和对象)所做的是使用maybe_serialize()/maybe_unserialize() 将此类类型(仅限于它们)转换为序列化(字符串类型)表示,或将其转换为序列化(字符串类型)表示。

虽然这简化了工作流,但也带来了一些问题,例如无法正确查询此类数据以及迁移中的常见问题(不知道序列化的工具或操作很容易破坏序列化字符串)。

若您可以控制自定义表的设计,并且它提供特定的专用功能,那个么您可能应该以一种不首先存储整个数组的方式来设计它。

SO网友:Daniel Antunes Rocha

<?php
if(isset($_POST[\'save\'])){
      $wpdb->insert(\'wp_table_name\',
          array(
              \'field_a\' => maybe_serialize( $_POST[\'field_a\'] ),
              \'field_b\' => maybe_serialize( $_POST[\'field_b\'] ),
              \'field_c\' => maybe_serialize( $_POST[\'field_c\'] ),
              \'field_d\' => maybe_serialize( $_POST[\'field_d\'] )             
              ),
          array(
              \'%s\',
              \'%s\',
              \'%s\',
              \'%s\'
              )
          );
}
?>
使用maybe\\u unserialize函数以数组形式获取值。

SO网友:Jorge Rivera

您可以使用相同的元键保存帖子元,只需设置$unique 参数设置为false。

if(isset($_POST[\'save\'])){
    foreach ($_POST as $post_key => $post_value){
        if ( \'save\' === $post_key )
            continue;
        if ( is_array($post_value) ) {
            foreach ( $post_value as $key => value ) {
                add_post_meta($post_id, $post_key . \'[\' . $key . \']\', $post_value, false);
            }
        }
        else{
            add_post_meta($post_id, $post_key, $post_value, false);
        }
    }
}
那你什么时候可以打电话get_post_meta ( $post_id, $post_key, false ) 使用该特定元键检索所有元值。

当然,如果这是一篇帖子,你想保存一些与该帖子相关的东西。例如,如果您的帖子是表单,并且您希望将提交的内容作为该特定表单(帖子)的元数据进行sve。

否则,我只需在foreach上对每个字段的表进行1次插入,就像我上面给出的示例一样,但使用$wpdb->insert() 您使用的方法。

结束

相关推荐

Array in meta key?

我有一个称为“会议”的自定义帖子类型。我想为已注册会议的用户创建一个特定的元密钥。例如,元密钥slug将是registered_users 它存储一个包含注册用户的所有ID的数组。有可能吗?如何创建它?当新用户注册时,如何更新它?我知道如何更新基本元,但这里是一个数组…:/