| |
, тогда…...
Вы видите, насколько это все неудобно. Поэтому во избежание недоразумений
подоб-
ного рода в таблицу вводят еще одно вспомогательное поле (колонку), назвав ее,
ска-
Часть 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])
Функция возвращает идентификатор результата (одна колонка), в котором сод
|
|