просто. В PHP и на этот случай есть своя команда - mysql_list_fields.
Синтаксис mysql_list_fields
ресурс mysql_list_fields (
строка database_name,
строка table_name
[, ресурс link_identifier])
Эта функция возвращает список полей в таблице table_name в базе данных database_name. Получается, что выбирать базу данных нам было необязательно, но это пригодится позже. Как можно заметить, результат работы этой функции - переменная типа ресурс. То есть это не совсем то, что мы хотели получить. Это ссылка, которую можно использовать для получения информации о полях таблицы, включая их названия, типы и флаги.
Функция mysql_field_name возвращает имя поля, полученного в результате выполнения запроса. Функция mysql_field_len возвращает длину поля. Функция mysql_field_type возвращает тип поля, а функция mysql_field_flags возвращает список флагов поля, записанных через пробел. Типы поля могут быть int, real, string, blob и т.д. Флаги могут быть not_null, primary_key, unique_key, blob, auto_increment и т.д.
Синтаксис у всех этих команд одинаков:
строка mysql_field_name (
ресурс result, целое field_offset)
строка mysql_field_type (
ресурс result, целое field_offset)
строка mysql_field_flags (
ресурс result, целое field_offset)
строка mysql_field_len (
ресурс result, целое field_offset)
Здесь result - это идентификатор результата запроса (например, запроса, отправленного функциями mysql_list_fields или mysql_query (о ней будет рассказано позднее)), а field_offset - порядковый номер поля в результате.
Вообще говоря, то, что возвращают функции типа mysql_list_fields или mysql_query, представляет собой таблицу, а точнее, указатель на нее. Чтобы получить из этой таблицы конкретные значения, нужно задействовать специальные функции, которые построчно читают эту таблицу. К таким функциям и относятся mysql_field_name и т.п. Чтобы перебрать все строки в таблице результата выполнения запроса, нужно знать число строк в этой таблице. Команда mysql_num_rows(ресурс result) возвращает число строк во множестве результатов result.
А теперь попробуем получить список полей таблицы Artifacts (коллекция экспонатов).
<?
$conn = mysql_connect(
'localhost','nina','123')
or die('Невозможно установить
соединение: '. mysql_error());
echo 'Соединение установлено';
mysql_select_db('book');
$list_f = mysql_list_fields (
'book','Artifacts',$conn);
$n = mysql_num_fields($list_f);
for($i=0;$i<$n; $i++){
$type = mysql_field_type($list_f, $i);
$name_f = mysql_field_name($list_f,$i);
$len = mysql_field_len($list_f, $i);
$flags_str = mysql_field_flags (
$list_f, $i);
echo '<br>Имя поля: '. $name_f;
echo '<br>Тип поля: '. $type;
echo '<br>Длина поля: '. $len;
echo '<br>Строка флагов поля: '.
$flags_str . '<hr>';
}
?>
В результате должно получиться примерно вот что (если в таблице всего два поля, конечно):
Имя поля: id
Тип поля: int
Длина поля: 11
Строка флагов поля:
not_null primary_key auto_increment
Имя поля: title
Тип поля: string
Длина поля: 255
Строка флагов поля:
Теперь немножко подкорректируем предыдущий пример. Будем не просто выводить информацию о поле, а отображать его в подходящий элемент html-формы. Так, элементы типа BLOB переведем в textarea (заметим, что поле description, которое мы создавали с типом TEXT, отображается как имеющее тип BLOB), числа и строки отобразим в текстовые строки ввода <input type=text>, а элемент, имеющий метку автоинкремента, вообще не будем отображать, поскольку его значение устанавливается автоматически.
Все это решается довольно просто, за исключением выделения из списка флагов флага auto_increment. Для этого нужно воспользоваться функцией explode.
Синтаксис explode:
массив explode( строка separator,
строка string [, int limit])
Эта функция разбивает строку string на части с помощью разделителя separator и возвращает массив полученных строк.