mssql_fetch_field

(PHP 4, PHP 5, PECL odbtp >= 1.1.1)

mssql_fetch_fieldВозвращает информацию о столбце

Внимание

Эта функция УДАЛЕНА в PHP 7.0.0.

Есть следующие альтернативы:

Описание

mssql_fetch_field ( resource $result [, int $field_offset = -1 ] ) : object

mssql_fetch_field() используется для получения информации о столбце из результирующего набора.

Список параметров

result

Результирующий набор, полученный как результат вызова mssql_query().

field_offset

Числовой индекс столбца. Если не задано, то будет использован следующий еще не извлеченный столбец. field_offset начинаются с 0.

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

Возвращает объект, содержащий информацию о столбце.

Объект содержит следующие свойства:

  • name - имя столбца. Если столбец является результатом функции, то имя задастся автоматически следующим образом - "computed#N", где #N - серийный номер.
  • column_source - имя таблицы, из которой выбран этот столбец.
  • max_length - максимальная длина поля.
  • numeric - 1, если поле числовое.
  • type - тип поля.

Примеры

Пример #1 Пример mssql_fetch_field()

<?php
// Соединяемся с MSSQL и выбираем базу
mssql_connect('MANGO\SQLEXPRESS''sa''phpfi');
mssql_select_db('php');

// Делаем выборку
$query mssql_query('SELECT * FROM [php].[dbo].[persons]');

// Рисуем таблицу
echo '<h3>Структура таблицы \'persons\'</h3>';
echo 
'<table border="1">';

// Заголовок таблицы
echo '<thead>';
echo 
'<tr>';
echo 
'<td>Имя столбца</td>';
echo 
'<td>Тип</td>';
echo 
'<td>Максимальная длина</td>';
echo 
'</tr>';
echo 
'</thead>';

// Выводим поля
echo '<tbody>';

for (
$i 0$i mssql_num_fields($query); ++$i) {
    
// Fetch the field information
    
$field mssql_fetch_field($query$i);

    
// Print the row
    
echo '<tr>';
    echo 
'<td>' $field->name '</td>';
    echo 
'<td>' strtoupper($field->type) . '</td>';
    echo 
'<td>' $field->max_length '</td>';
    echo 
'</tr>';
}

echo 
'</tbody>';
echo 
'</table>';

// Освобождаем результирующий набор
mssql_free_result($query);
?>

Смотрите также

add a note add a note

User Contributed Notes 10 notes

up
0
schattenfeld at gmail dot com
17 years ago
If you want to describe table like DESCRIBE in MySQL you can use this:
$sql = <<<SQL
SELECT column_name,data_type,column_default,is_nullable
FROM
  information_schema.tables AS t
  JOIN
  information_schema.columns AS c ON
    t.table_catalog=c.table_catalog AND
    t.table_schema=c.table_schema AND
    t.table_name=c.table_name
WHERE
  t.table_name='TABLE-NAME'
SQL;
up
0
huszti_dot_roland_at_freemail_dot_com
18 years ago
For really detailed table information, use syscolumns, like this:

SELECT c.name, c.prec, c.scale, t.name type
  FROM syscolumns c, systypes t, sysobjects o
  WHERE o.name = 'yourtablename' AND o.id = c.id AND c.xtype = t.xtype

For other properties see the MS SQL online help. Search for 'syscolumns'.

Or an another solution:

sp_columns @table_name = 'yourtablename', @column_name = 'thecolumnname'
//no "select ..." !!!!

This gives info about only the specified column.
up
0
php_rindern_de
20 years ago
commenting Reynard Hilman:

for me it looks like the colstat field value of 1 in syscolumns table indicates an Identity Column.
up
0
Reynard Hilman
21 years ago
If you want to describe table structure (like mysql 'desc table' command), sending this query might help:
<?
$sql
= "SELECT c.name, c.isnullable, c.length, c.colstat, t.name type
  FROM syscolumns c, systypes t, sysobjects o
  WHERE o.name = '
$table' AND o.id = c.id AND c.xtype = t.xtype";
?>
I suspect the colstat field in syscolumns table indicates primary key when its value is 1
up
0
bmaddy_at_class_dot_umn_dot_edu
21 years ago
Be aware that this function will only return the first 30 characters of the name of the column.  If the actual column name is longer, it will be truncated.  This is at least true with the following setup:
PHP 4.3.1
MSSQL 8.00.760

Have a good day everyone!
Brian
up
0
alonf at spiralsolutions dot com
21 years ago
As kubalaa at bigfoot dot com note mssql_fetch_field->column_source return field name instead table name also with MSSQL2000 connection. Be adwised!!!
up
-1
pong at taft dot org
22 years ago
When you mssql_fetch_field(int result), you need to do loop to get the name of each field.  Something like:

while($fld = mssql_fetch_field($rs)){
        echo $fld->name . "<br>";        
    }

I am wondering why we cannot refer it by a field number.
up
-1
kubalaa at bigfoot dot com
24 years ago
Using this function with MSSQL 7, $returned->column_source is the column name, not the table name as it should be.
up
-2
not a mail address
16 years ago
kubalaa at bigfoot dot com first reported the problem that column_source contains the FIELD name instead of the source TABLE name 04-Apr-2000 03:58. The bug has been reported as well.

For those who wonder if it was fixed over the past 8 years: No, the bug still is the same, no workaround available.
up
-2
skipsey at hotmail dot com
23 years ago
It seems fairly hard to get a list of the tables from your database using MSSQL but this seems to do the trick. This is set to get only the User Tables and ignores the sytem tables.

<?php
mssql_connect
("server","","") or die ("help me!");
mssql_select_db("") or die ("Noooo!");

$result = mssql_query ("sp_tables");
$fields = mssql_num_fields ($result);
$rows   = mssql_num_rows ($result);

for (
$f=0; $f<$rows; $f++) {   
   
$CHKTYPE=GetField($result,"TABLE_TYPE",$f);
   
    if(
$CHKTYPE=='TABLE'){

       
//$name = mssql_fetch_field($result, 2);
       
$field=GetField($result,"TABLE_NAME",$f)."<br>";
        echo
$field;

    }
}
?>
To Top