Автор Тема: Ускорение(оптимизация) работы скрипта.  (Прочитано 2932 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн pirojok

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 12
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Добрый день.

есть самописный скрипт фотогаллереи работающий с MySQL.

Он имеет следующию структуру:

главный файл
                       модули

В отдельные файлы, модули вынесены подпрограммы работы с БД, с сессиями, загрузка файлов и т.д.
Насколько мне извесно при работе с БД, очень много времени тратиться на установку соединения.

my $dbh 
DBI->connect($dsn$db_user_name$db_password)|| die "Error while conecting to DB: $DBI::errstr()";


Вопрос в следующем:
в большинстве подключаемых модулей я соединяюсь с БД. Я попробовал использовать соединение которое осуществляеться в главном файле для всех модулей.
Сделал я это  следующим образом:
В модуле создал ссылку на $dbh
[/phpl]
$dbh_ref=\\$dbh
[/code]

а главном файле сделал вот так


my $dsn 
= \'DBI:mysql:xxxxxxxxxxx.ru\';
my $dbh = DBI->connect($dsn, $db_user_name, $db_password)|| die "Error while conecting to DB: $DBI::errstr()";
$$dbh_ref=$dbh;



В модуле который работает с сессиями это походу не прокатывает(выдаёт ошибку). В остальном прекрасно работает.
[code=perl]
Can\'t connect to data source , no database driver specified and DBI_DSN env var not set at /usr/local/lib/perl5/site_perl/5.8.8/CGI/Session/Driver/DBI.pm line 23
[/php]

Вот пример как всу устроено в модуле сессий:

package security
#Íàçâàíèå ïàêåòà è êëàññà

########################################################
#Êëàññ
########################################################

use Exporter;
@
ISA=(\'Exporter\');
@EXPORT=qw(&ses $dbh_ref);
use CGI::Session;
#use DBI;
use CGI qw(:all);
use CGI::Carp qw(fatalsToBrowser);
use expiresessions;
use error_log;
########################################################
$CGI::Session::MySQL::TABLE_NAME = \'kr_sessions\';
my $cgi = new CGI;
$dbh_ref=\\$dbh;


my $sql="SELECT * FROM kr_users WHERE id=$user_id";
                  my $sql_request=$dbh->prepare(qq[$sql]);
                  $sql_request->execute || error_log("Error while to execute the SQL comand <b>$sql</b>: $DBI::errstr()");
                  %OUT=%{$sql_request->fetchrow_hashref};


В чём может быть причина ошибки? вообще так можно делать?

И ещё вопрос если в главном файле подключены модули типо:
#!/usr/bin/perl
use CGI qw(:all);
use CGI::Carp qw(fatalsToBrowser);
use File::Path;
use DBI;
use Time::HiRes qw(time);

Надо ли эти же модули поключать в своих(самописных)?
В примере предоставленном выше, строка use DBI закоментирована, но модуль всё равно хорошо работает с Mysql.

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
Ускорение(оптимизация) работы скрипта.
« Ответ #1 : 18 Ноября 2007, 23:46:52 »
все проще, ты один раз подключаешся
$dbh = DBI->connect("DBI:mysql:urp_baza;localhost",
а дальше просто без лишних движений выбираешь то что нужно
$ary_ref = $dbh->selectall_arrayref("SELECT data, time.
после чего (ли до того) можно подключать твои подпрограмы (модули) и тожен не парясь делать что угодно, например так:
$dbh->do("insert, update и delete....
еще что то делаем скриптом и опять что то
$count = $dbh->selectrow_array("SELECT COUNT(*)...
и так до бесконечности

самое главное незаюбывать о
$sth->finish;
и о очистке масивов
@row=();
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28