Шаг 15 - Функции работы с MySQL, часть 4

Функции (MYSQL_FETCH_FIELD() и MYSQL_FETCH_LENGTHS) возвращают служебную информацию. MYSQL_FETCH_FIELD возвращает объект, содержащий характеристики полей, участвовавших в запросе. Например,

//где-то выше выполнен селект:
$res=mysql_db_query("books","select * from books");
//теперь, имея идентификатор QUERY-ресурса, получаем служебную информацию
$i=0;
while($i<mysql_num_fields($res)){
	//получим количество полей в запросе
	$field=mysql_fetch_field($res,$i) 
	//и выводим по каждому полю информацию
	foreach(($vars=get_object_vars($field)) as $k => $v) {
		echo "$k => $v<br>";
	}
	$i++;
}

В результате получим что-то вроде этого:

name => id
table => books
def => 
max_length => 1
not_null => 1
primary_key => 1
multiple_key => 0
unique_key => 0
numeric => 1
blob => 0
type => int
unsigned => 0
zerofill => 0

и т.д. для каждого поля запроса (мы организовали цикл по всем полям - см. код). Что мы тут имеем (в данном случае, для поля 'ID' таблицы 'BOOKS')?

Функции MYSQL_FETCH_FIELDS были переданы 2 параметра: идентификатор результата SQL-запроса и номер поля в запросе. Функция вернула объект со следующими полями:

Name - имя поля в запросе (или alias, если он использован), table - сама таблица, def - НЛО какое-то! я так и не выяснил, что это за значение; это не DEFAULT-атрибут поля таблицы (документация и php.net вместе с zend.com-ом молчат как рыба об лед! :-( ), max_length - максимальная длина среди результатов (имеется в виду не объявленная при создании таблицы длина поля, а количество символов самого длинного значения для данного поля таблицы, полученное при данном запросе. Остальные атрибуты, я думаю, очевидны. Напомню лишь по последнему значению: zerofill означает, что для цифрового поля при выводе (select-е) вместо лидирующих пробелов будут нули.

Теперь о функции MYSQL_FETCH_LENGTHS. Здесь все совсем просто. Единственный параметр - все тот же идентификатор ресурсов, возвращаемый query-функцией. На выходе - обычный массив, заполненный длинами для всех полей текущей строки запроса к базе.

Если взять i-е поле запроса, то

mysql_fetch_fields($res,$i) == MAX( mysql_fetch_length($res) [$i] )

где MAX - обозначение процедуры поиска максимального значения среди i-ых элементов всех массивов, возвращаемых MYSQL_FETCH_LENGTH при переборе всех строк, полученных в запросе к базе.

На этом дальнейшее рассмотрение mysql-функций PHP пока закончим. Остальное рассмотрим позднее - когда разберемся с стринговыми функциями, массивами и прочими необходимыми для дальнейшего развития нашего книжного проекта возможностями PHP.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Константин Платонов - 28.11.2000