Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции БДиСУБД.docx
Скачиваний:
21
Добавлен:
21.11.2019
Размер:
517.3 Кб
Скачать

Построениеинтерфейсадлядобавленияинформации

Итак,унасестькакая-тотаблицавбазеданных.Чтобыпостроитьинтерфейсдлядобавленияинформациивэтутаблицу,нужноееструктуру(т.е.наборееполей)отобразитьвhtml-форму.

Разобьемэтузадачунаследующиеподзадачи:

  • установкасоединениясБД;

  • выборрабочейБД;

  • получениеспискаполейтаблицы;

  • отображениеполейвhtml-форму.

Послеэтогоданные,введенныевформу,нужнозаписатьвбазуданных.Рассмотримвсеэтизадачипопорядку.

Установкасоединения

Итак,первое,чтонужносделать,-этоустановитьсоединениесбазойданных.Воспользуемсяфункциейmysql_connect.

Синтаксисmysql_connect

ресурсmysql_connect([строкаserver

[,строкаusername[,строкаpassword

[,логическоеnew_link

[,целоеclient_flags]]]]])

ДаннаяфункцияустанавливаетсоединениессерверомMySQLивозвращаетуказательнаэтосоединениеилиFALSEвслучаенеудачи.Дляотсутствующихпараметровустанавливаютсяследующиезначенияпоумолчанию:

server='localhost:3306'

username=имяпользователявладельца

процессасервера

password=пустойпароль

Еслифункциявызываетсядваждысоднимиитемижепараметрами,тоновоесоединениенеустанавливается,авозвращаетсяссылканастароесоединение.Чтобыэтогоизбежать,используютпараметрnew_link,которыйзаставляетвлюбомслучаеоткрытьещеодносоединение.

Параметрclient_flags-этокомбинацияследующихконстант:MYSQL_CLIENT_COMPRESS(использоватьпротоколсжатия),MYSQL_CLIENT_IGNORE_SPACE(позволяетвставлятьпробелыпослеименфункций),MYSQL_CLIENT_INTERACTIVE(ждатьinteractive_timeoutсекунд-вместоwait_timeout-дозакрытиясоединения).

Параметрnew_linkпоявилсявPHP4.2.0,апараметрclient_flags-вPHP4.3.0.

Соединениессерверомзакрываетсяпризавершенииисполненияскрипта,еслионодоэтогонебылозакрытоспомощьюфункцииmysql_close().

Итак,устанавливаемсоединениесбазойданныхналокальномсервередляпользователяninaспаролем"123":

<?

$conn=mysql_connect(

"localhost","nina","123")

ordie("Невозможноустановить

соединение:".mysql_error());

echo"Соединениеустановлено";

mysql_close($conn);

?>

Действиеmysql_connectравносильнокоманде

shell>mysql-unina-p123

Выборбазыданных

Послеустановкисоединениянужновыбратьбазуданных,скоторойбудемработать.Нашиданныехранятсявбазеданныхbook.ВMySQLвыборбазыданныхосуществляетсяспомощьюкомандыuse:

mysql>usebook;

ВPHPдляэтогосуществуетфункцияmysql_select_db.

Синтаксисmysql_select_db:

логическоеmysql_select_db(

строкаdatabase_name

[,ресурсlink_identifier])

ЭтафункциявозвращаетTRUEвслучаеуспешноговыборабазыданныхиFALSE-впротивномслучае.

Сделаембазуданныхbookрабочей:

<?

$conn=mysql_connect(

"localhost","nina","123")

ordie("Невозможноустановить

соединение:".mysql_error());

echo"Соединениеустановлено";

mysql_select_db("book");

?>

Получениеспискаполейтаблицы

Теперьможнозанятьсясобственнорешениемзадачи.Какполучитьсписокполейтаблицы?Оченьпросто.ВPHPинаэтотслучайестьсвоякоманда-mysql_list_fields.

Синтаксисmysql_list_fields

ресурсmysql_list_fields(

строкаdatabase_name,

строкаtable_name

[,ресурсlink_identifier])

Этафункциявозвращаетсписокполейвтаблицеtable_nameвбазеданныхdatabase_name.Получается,чтовыбиратьбазуданныхнамбылонеобязательно,ноэтопригодитсяпозже.Какможнозаметить,результатработыэтойфункции-переменнаятипаресурс.Тоестьэтонесовсемто,чтомыхотелиполучить.Этоссылка,которуюможноиспользоватьдляполученияинформацииополяхтаблицы,включаяихназвания,типыифлаги.

Функцияmysql_field_nameвозвращаетимяполя,полученноговрезультатевыполнениязапроса.Функцияmysql_field_lenвозвращаетдлинуполя.Функцияmysql_field_typeвозвращаеттипполя,афункцияmysql_field_flagsвозвращаетсписокфлаговполя,записанныхчерезпробел.Типыполямогутбытьint,real,string,blobит.д.Флагимогутбытьnot_null,primary_key,unique_key,blob,auto_incrementит.д.

Синтаксисувсехэтихкомандодинаков:

строкаmysql_field_name(

ресурсresult,целоеfield_offset)

строкаmysql_field_type(

ресурсresult,целоеfield_offset)

строкаmysql_field_flags(

ресурсresult,целоеfield_offset)

строкаmysql_field_len(

ресурсresult,целоеfield_offset)

Здесьresult-этоидентификаторрезультатазапроса(например,запроса,отправленногофункциямиmysql_list_fieldsилиmysql_query(онейбудетрассказанопозднее)),аfield_offset-порядковыйномерполяврезультате.

Вообщеговоря,то,чтовозвращаютфункциитипаmysql_list_fieldsилиmysql_query,представляетсобойтаблицу,аточнее,указательнанее.Чтобыполучитьизэтойтаблицыконкретныезначения,нужнозадействоватьспециальныефункции,которыепострочночитаютэтутаблицу.Ктакимфункциямиотносятсяmysql_field_nameит.п.Чтобыперебратьвсестрокивтаблицерезультатавыполнениязапроса,нужнознатьчислостроквэтойтаблице.Командаmysql_num_rows(ресурсresult)возвращаетчислостроквомножестверезультатовresult.

АтеперьпопробуемполучитьсписокполейтаблицыArtifacts(коллекцияэкспонатов).

<?

$conn=mysql_connect(

"localhost","nina","123")

ordie("Невозможноустановить

соединение:".mysql_error());

echo"Соединениеустановлено";

mysql_select_db("book");

$list_f=mysql_list_fields(

"book","Artifacts",$conn);

$n=mysql_num_fields($list_f);

for($i=0;$i<$n;$i++){

$type=mysql_field_type($list_f,$i);

$name_f=mysql_field_name($list_f,$i);

$len=mysql_field_len($list_f,$i);

$flags_str=mysql_field_flags(

$list_f,$i);

echo"<br>Имяполя:".$name_f;

echo"<br>Типполя:".$type;

echo"<br>Длинаполя:".$len;

echo"<br>Строкафлаговполя:".

$flags_str."<hr>";

}

?>

Врезультатедолжнополучитьсяпримерновотчто(есливтаблицевсегодваполя,конечно):

Имяполя:id

Типполя:int

Длинаполя:11

Строкафлаговполя:

not_nullprimary_keyauto_increment

_________________________________________________

Имяполя:title

Типполя:string

Длинаполя:255

Строкафлаговполя: