db_add_field
includes/database.mysql-common.inc, строка 286
- Версии
- 6
db_add_field(&$ret, $table, $field, $spec, $keys_new = array())
Добавляет новое поле в таблицу.
Параметры
$ret
Массив, к которому будут добавлены результаты запроса.
$table
Имя изменяемой таблицы.
$field
Название добавляемого поля.
$spec
Массив описаний поля, такой же, как получаемый из описания схемы.
Описание может также содержать ключ 'initial'
, значениям нового поля во всех строках будут присвоено значение ключа. Это удобно использовать при создании НЕ ПУСТЫХ полей без значения по умолчанию в существующих таблицах.
$keys_new
Дополнительные описания ключей и индексов, которые необходимо создать в таблице при добавлении поля. Формат такой же как в описании таблицы, но без элемента 'fields'
. Если Вы добавляете поля типа 'serial'
, вы ДОЛЖНЫ указать минимум одно ключевое поле или индекс, включающее его, в этом массиве. См. также db_change_field()
для подробных объяснений зачем это нужно.
Связанные темы
Код
<?php
function db_add_field(&$ret, $table, $field, $spec, $keys_new = array()) {
$fixnull = FALSE;
if (!empty($spec['not null']) && !isset($spec['default'])) {
$fixnull = TRUE;
$spec['not null'] = FALSE;
}
$query = 'ALTER TABLE {'. $table .'} ADD ';
$query .= _db_create_field_sql($field, _db_process_field($spec));
if (count($keys_new)) {
$query .= ', ADD '. implode(', ADD ', _db_create_keys_sql($keys_new));
}
$ret[] = update_sql($query);
if (isset($spec['initial'])) {
// All this because update_sql does not support %-placeholders.
$sql = 'UPDATE {'. $table .'} SET '. $field .' = '. db_type_placeholder($spec['type']);
$result = db_query($sql, $spec['initial']);
$ret[] = array('success' => $result !== FALSE, 'query' => check_plain($sql .' ('. $spec['initial'] .')'));
}
if ($fixnull) {
$spec['not null'] = TRUE;
db_change_field($ret, $table, $field, $field, $spec);
}
}
?>
Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии