drupal_write_record

Хочешь помочь с переводом? Это очень просто и быстро. Лишь зарегистрируйся, и можешь тут же начать переводить.

includes/common.inc, строка 3354

Версии
6
drupal_write_record($table, &$object, $update = array())

Сохраняет запись в базу данных согласно схеме.

Для попущенных параметров заполняются значения по умолчанию, и типы 'serial' (автоматический инкремент) заполняются ID.

Параметры

$table Имя таблицы; должно существовать в схеме API.

$object Объект для записи. Согласно схеме, по умолчанию может быть указан объект, либо ID для типа 'serial'. Могут быть переданы как тип массив, так и объект.

$update Если производится обновление, то задает имена полей для основных ключей. Вызывающая функция должна сама "знать", существует ли уже запись в базе для данного объекта. Если задан только один ключ, то вы можете передать простую строку.

Возвращаемое значение

При невозможности создать запись будет возвращено FALSE. Иначе возвращается SAVED_NEW или SAVED_UPDATED, в зависимости от выполненной операции. Параметр $object содержит значения для полей 'serial', определяемых параметром $table. Например, $object->nid будет записано после вставки новой ноды.

Связанные темы

▾ 8 функции вызывают drupal_write_record()

blogapi_metaweblog_new_media_object in modules/blogapi/blogapi.module
Коллбэк Blogging API. Вставляет файл в Друпал.
contact_admin_edit_submit in modules/contact/contact.admin.inc
Process the contact category edit page form submission.
file_save_upload in includes/file.inc
Сохраняет загруженный файл в новое место. Исходный файл должен быть загружен и обработан.
node_save in modules/node/node.module
Сохраняет ноду в базе данных.
taxonomy_save_term in modules/taxonomy/taxonomy.module
Вспомогательная функция для taxonomy_form_term_submit().
taxonomy_save_vocabulary in modules/taxonomy/taxonomy.module
_block_rehash in modules/block/block.module
Update the 'blocks' DB table with the blocks currently exported by modules.
_node_save_revision in modules/node/node.module
Helper function to save a revision with the uid of the current user.

Код

<?php
function drupal_write_record($table, &$object, $update = array()) {
  // Standardize $update to an array.
  if (is_string($update)) {
    $update = array($update);
  }

  $schema = drupal_get_schema($table);
  if (empty($schema)) {
    return FALSE;
  }

  // Convert to an object if needed.
  if (is_array($object)) {
    $object = (object) $object;
    $array = TRUE;
  }
  else {
    $array = FALSE;
  }

  $fields = $defs = $values = $serials = $placeholders = array();

  // Go through our schema, build SQL, and when inserting, fill in defaults for
  // fields that are not set.
  foreach ($schema['fields'] as $field => $info) {
    // Special case -- skip serial types if we are updating.
    if ($info['type'] == 'serial' && count($update)) {
      continue;
    }

    // For inserts, populate defaults from Schema if not already provided
    if (!isset($object->$field) && !count($update) && isset($info['default'])) {
      $object->$field = $info['default'];
    }

    // Track serial fields so we can helpfully populate them after the query.
    if ($info['type'] == 'serial') {
      $serials[] = $field;
      // Ignore values for serials when inserting data. Unsupported.
      unset($object->$field);
    }

    // Build arrays for the fields, placeholders, and values in our query.
    if (isset($object->$field)) {
      $fields[] = $field;
      $placeholders[] = db_type_placeholder($info['type']);

      if (empty($info['serialize'])) {
        $values[] = $object->$field;
      }
      else {
        $values[] = serialize($object->$field);
      }
    }
  }

  // Build the SQL.
  $query = '';
  if (!count($update)) {
    $query = "INSERT INTO {". $table ."} (". implode(', ', $fields) .') VALUES ('. implode(', ', $placeholders) .')';
    $return = SAVED_NEW;
  }
  else {
    $query = '';
    foreach ($fields as $id => $field) {
      if ($query) {
        $query .= ', ';
      }
      $query .= $field .' = '. $placeholders[$id];
    }

    foreach ($update as $key){
      $conditions[] = "$key = ". db_type_placeholder($schema['fields'][$key]['type']);
      $values[] = $object->$key;
    }

    $query = "UPDATE {". $table ."} SET $query WHERE ". implode(' AND ', $conditions);
    $return = SAVED_UPDATED;
  }

  // Execute the SQL.
  if (db_query($query, $values)) {
    if ($serials) {
      // Get last insert ids and fill them in.
      foreach ($serials as $field) {
        $object->$field = db_last_insert_id($table, $field);
      }
    }
  }
  else {
    $return = FALSE;
  }

  // If we began with an array, convert back so we don't surprise the caller.
  if ($array) {
    $object = (array) $object;
  }

  return $return;
}
?>
Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Вход в систему