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);
}
}
?>Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии 