Функции (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.