MySQL & mSQL



              

Пример приложения, использующего DBI - часть 2


# DBI::connect() использует формат 'DBI:driver:database', в нашем случае

# используется драйвер MySQL и открывается база данных 'teach',

my $dbh = DBI->connect('DBI:mysql:teach');

# Операция добавления распределена между тремя отдельными функциями. Первая функция, add,

# выводит пользователю форму шаблона для создания нового экзамена,

sub add {

$subject = param('subject')

if (param('subjects'));

$subject = ""

if $subject eq 'all';

print header, start_html('title'=>'Create a New Test',

'BGCOLOR'=>'white'); print <<END_OF_HTML;

<Н1>Создание нового экзамена</п1> <FORM ACTION="test.cgi" METHOD=POST>

<INPUT TYPE=HIDDEN NAME="action" VALUE="add2"> Предмет: END_OF_HTML

my @ids = (); my %subjects = ();

my $out2 = $dbh->prepare("select id,name from subject order by name" $out2->execute;

# DBI: :fetchrow_array() совершенно аналогична Msql: :fetchrow()

while(my($id,$subject)=$out2->fetchrow_array) {

push(@ids,Sid); $subjects{"$id"} = Ssubject; }

print popup_menu('name'=>'subjects', 'values'=>[@ids], 'default'=>$subject, 'labels'=>\%subjects);

print <<END_OF_HTML; <br>

Число вопросов: <INPUT NAME="num" SIZE=5><br> Название или идентификатор (например, дата) экзамена:

<INPUT NAME="name" SIZE=20>

<Р>

<INPUT TYPE=SUBMIT VALUE=" Следующая страница ">

<INPUT TYPE=RESET> </form></body></html>

END_OF_HTML }

Эта функция выводит форму, позволяющую пользователю выбрать предмет для экзамена, а также количество вопросов и название. Для вывода списка имеющихся предметов выполняется запрос к таблице предметов. При выполнении в DBI запроса SELECT он должен быть сначала подготовлен, а затем выполнен. Функция DBI::prepare полезна при работе с некоторыми серверами баз данных, позволяющими осуществить операции над подготовленными запросами, прежде чем выполнить их. Для MySQL и mSQL это означает лишь запоминание запроса до вызова функции DBI:: execute .




Содержание  Назад  Вперед