Шаг 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.
|