Файл lab5.php
<?php
// Количество повторений запроса
$iterations = 100;
// Массив с запросами
$queries = array (
"show databases",
"show tables from `mysql`",
"select * from `mysql`.`mysql_user`",
"select * from `mysql`.`help_relation`",
"select * from `mysql`.`help_topic`");
// Подсоединение к СУБД
$lnk = mysql_connect('127.0.0.1', 'root', '123456');
if ($lnk === FALSE) { die(); }
// инициализация массива оставшихся итераций для каждого запроса
for ($i=0;$i<sizeof($queries);$i++)
{
$final_data[$i]['iterations'] = $iterations;
}
// Продолжать выполнение следует в случае, если хотя бы
// для одного запроса не был исчерпан лимит итераций
function can_continue($final_data)
{
$sum = 0;
for ($i=0;$i<sizeof($final_data);$i++)
{
$sum+=$final_data[$i]['iterations'];
}
if ($sum>0)
{
return TRUE;
}
else
{
return FALSE;
}
}
// Выполнять следует случайный запрос, однако при
// этом у него не должен быть исчерпан лимит итераций
function get_query_number($final_data)
{
$x = mt_rand(0, sizeof($final_data)-1);
if ($final_data[$x]['iterations']>0)
{
return $x;
}
else
{
for ($i=0; $i<sizeof($final_data); $i++)
{
if ($final_data[$i]['iterations']>0)
{
return $i;
}
}
}
}
// Функция подсчёта среднего времени выполнения запроса
function avg($arr)
{
if (sizeof($arr)==0)
{
return 0;
}
$sum = 0;
for ($i=0; $i<sizeof($arr); $i++)
{
$sum+=$arr[$i];
}
return $sum/sizeof($arr);
}
// Основной цикл: выполнение запросов и сбор значений времени
while (can_continue($final_data))
{
$x = get_query_number($final_data);
$t1 = microtime(TRUE);
mysql_query($queries[$x]);
$t2 = microtime(TRUE);
$final_data[$x]['avg'][] = $t2-$t1;
$final_data[$x]['iterations']--;
}
// Генерация и вывод результатов
for ($i=0;$i<sizeof($queries);$i++)
{
echo 'Query ('.($i+1).') ['.$queries[$i].']:'."\n";
echo 'Min: '.min($final_data[$i]['avg'])."\n";
echo 'Max: '.max($final_data[$i]['avg'])."\n";
echo 'Avg: '.avg($final_data[$i]['avg'])."\n\n";
}
// Закрытие соединения с СУБД
mysql_close($lnk);
?>
Пример выполнения работы № 6
Вариант-N: написать скрипт, получающий через форму номер паспорта пользователя, проверяющий его корректность (две латинские заглавные буквы, семь цифр) и добавляющий его в таблицу БД в случае, если такого номера там ещё нет.