Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

Библиотека :: Компьютеры и Программирование :: Котеров Д. В. - Самоучитель PHP 4
<<-[Весь Текст]
Страница: из 287
 <<-
 
, тогда…... 
Вы видите, насколько это все неудобно. Поэтому во избежание недоразумений 
подоб- 
ного рода в таблицу вводят еще одно вспомогательное поле (колонку), назвав ее, 
ска-

Часть IV. Стандартные функции PHP 378 
жем, id. Этот самый id уникален у каждой записи, поэтому мы можем, зная id нуж- 

ного нам человека, тут же получить его данные. Кроме того, если нам понадобится,
 
например, зафиксировать в таблице еще и родственные связи людей (кто является 
чьим отцом, например), мы можем завести в ней еще одно поле — parent_id, в ко- 
тором будет храниться id родителя конкретного человека. Таким образом, 
описанная 
техника оказывается довольно удобной. 
Пусть теперь мы хотим добавить в таблицу сведения о еще одном человеке. Логично 

было бы, чтобы его id проставлялся автоматически. Возникает вопрос: как нам 
этот 
id вычислить? В самом деле, мы же не знаем, какие id в таблице в данный момент 
"свободны"... Можно использовать для этой цели текущее время в секундах. Но 
вдруг 
именно в данную секунду кто-то еще точно так же добавляет в базу данных запись? 

Можно, конечно, взять максимальный id, прибавить к нему единичку и занести в 
таблицу. Но где гарантия, что, опять же в этот момент другой администратор не 
про- 
делал ту же операцию — до того, как вы добавили свою информацию, но после того, 

как определили максимальный id? 
Как раз для решения этой проблемы и предназначена в MySQL возможность под на- 
званием AUTO_INCREMENT. А именно, при создании таблицы мы можем какое- 
нибудь ее поле (в нашем случае как раз id) объявить так: 
ИмяПоля int auto_increment primary key 
Немного длинновато, но это стоит того! Теперь любая операция INSERT автоматиче- 

ски проставит у добавленной записи поле ИмяПоля так, чтобы оно было уникально 
во 
всей таблице — MySQL это гарантирует. В простейшем случае — просто увеличит на 
1 некий внутренний счетчик, глобальный для всей таблицы, и занесет его новое 
зна- 
чение в нужное поле записи. Причем гарантируется, что никакие проблемы с совме- 

стным доступом к таблице просто не могут возникнуть, как это произошло бы, ис- 
пользуй мы "кустарные" способы. 
Получить только что вставленный идентификатор можно при помощи функции 
mysql_insert_id(). 
int mysql_insert_id([int $link_identifier]) 
Функция возвращает непосредственно перед ее вызовом сгенерированный идентифи- 
катор записи для автоинкрементного поля после выполнения команды insert. Вы- 
зывать ее разумно только сразу после выполнения инструкции insert, например, в 
таком контексте: 
mysql_query("insert into Таблица(поле1, поле2) values('aa','bb')"); 
$id=mysql_insert_id(); 
Теперь к только что вставленной записи можно обратиться, используя 
идентификатор 
$id: 
$r=mysql_query("select * from Таблица where id=$id"); 
$Row=mysql_fetch_array($r); 

Глава 26. Работа с базой данных MySQL 379 
Работа с таблицами 
Вот и подходит к концу наш разговор о функциях поддержки MySQL в PHP. Мы по- 
знакомились с большинством функций, которые встроены в PHP для взаимодействия 
с этой СУБД. Мы еще вернемся к MySQL в части V книги. 
Подводя черту, имеет смысл рассмотреть несколько функций, имеющих отношение к 
работе с таблицами в целом. 
int mysql_list_fields(string $dbname, string $tblname [,int $link]) 
Функция mysql_list_fields() возвращает информацию об указанной таблице 
$tblname в базе данных $dbname, используя идентификатор соединения $link, ес- 
ли он задан (в противном случае — последнее открытое соединение). Возвращаемое 
значение — идентификатор результата, который может быть проанализирован обыч- 
ными средствами, либо при помощи функций mysql_field_flags(), 
mysql_field_len(), mysql_field_name() и mysql_field_type(). В случае 
ошибки возвращается –1, текст сообщения ошибки может быть получен обычным 
способом. 
int mysql_list_tables(string $database [,int $link_identifier]) 
Функция возвращает идентификатор результата (одна колонка), в котором сод
 
<<-[Весь Текст]
Страница: из 287
 <<-