Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Несколько вопросов по Perl, Несколько вопросов по Perl 
:(
    Опции темы
cosamia
Дата 6.6.2005, 05:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 11.5.2005

Репутация: нет
Всего: нет



Не подскажите, как в перле работать с веб сервисами?

И также еще несколько вопросов:

1) есть ли в перле обработка исключений ?
например на jsp я могу сделать так:
<%@ page errorPage="jsp1_error.jsp" %>
у C# : try-catch-finally
у других языков другие примочки.
а как на перле?

2) попытался обработать подключение к БД следующим образом:

$dbh=DBI->connect(...)||die "Can not connect";
Для проверки ввожу неправильный пароль и естественно подключения нет, но сообщение об этом не пишется. Почему?

3)вопрос по сессиям. в вышеуказаном примере используется mySQL для хранения сессий:
tie %session, 'Apache::Session::MySQL'

А если у меня база Oracle или MS SQL, достаточно ли будет написать:
tie %session, 'Apache::Session::Oracle'
tie %session, 'Apache::Session::MSSQL'
или для каждой базы это делается по разному?
PM   Вверх
chaos
Дата 6.6.2005, 06:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: нет
Всего: 44



ответ на 1 вопрос: для этого есть eval
PM WWW   Вверх
cosamia
Дата 6.6.2005, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 11.5.2005

Репутация: нет
Всего: нет



вопрос на ответ на 1й вопрос%
eval что?
пример кода можно?

PM   Вверх
korob2001
Дата 6.6.2005, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 13
Всего: 61



1.) Про eval читай тута: http://forum.vingrad.ru/index.php?showtopic=8681

2.) Потому что ошибка происходит не в Perl а в MySQL, для того, что бы получить эту ошибку, при подключении нужно Попробуй написать так:
Код

my $host = "localhost";
my $base = "mydb";
my $log = "твой логин";
my $pass = "твой пароль";
my $dbh = DBI->connect("DBI:mysql:host=$host;database=$base", $log, $pass,
                           { PrintError => 0, RaiseError => 1 } ) or die "Error: $DBI::errstr\n";

# Здесь делай что-то с подключением

$dbh->disconnect();


3. Достаточно, если конечно у тебя установлены эти модули. А вообще этот вопрос можно было и не задавать, достаточно было попробовать. Если рабоать не будет, тогда устанавливай модули Apache::Session::Oracle и Apache::Session::MSSQL и будет тебе счастье.

Удачи.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
cosamia
Дата 7.6.2005, 06:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 11.5.2005

Репутация: нет
Всего: нет



2) не работает так как ты редлагаешь:
my $dbh = DBI->connect("DBI:mysql:host=$host;database=$base", $log, $pass,
{ PrintError => 0, RaiseError => 1 } ) or die "Error: $DBI::errstr\n";



в случае не правильного пароля не выводится никакой ошибки!

Я попробовал еще сделать так:

use CGI::Carp qw(fatalsToBrowser))
$dbh = DBI->connect("DBI:mysql:host=$host;database=$base", $log, $pass,
{ PrintError => 1, RaiseError => 0 } )

Но в этом случае выдается такое сообщение:
Software error: Can't call method "prepare" on an undefined value at /home... line ##
For help, please send mail to the webmaster ([email protected]), giving this error message and the time and date of the error.


неужели никто из перл гуру никогда не проверяет коннект? или вы его всегда делаете на основе статического пароля-логина?
Уже 2 дня по форумам спрашиваю и никто не знает.



Добавлено @ 06:30
кстати если AutoCommit => 0 то это ON или OFF ?

PM   Вверх
korob2001
Дата 7.6.2005, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 13
Всего: 61



Пишу такой код, в котором не верно указан пароль:
Код

#!/usr/bin/perl -w
use strict;
use DBI;
use CGI::Carp qw( fatalsToBrowser );
my $host = "localhost";
my $base = "autocat";
my $log = "root";
my $pass = "dsd";
my $dbh = DBI->connect("DBI:mysql:host=$host;database=$base", $log, $pass,
                           { PrintError => 1, RaiseError => 1 } ) or die "Error: $DBI::errstr\n";

# Здесь делай что-то с подключением

$dbh->disconnect();

Получаю такую ошибку прямо в браузер:
Цитата
Software error:
DBI connect('host=localhost;database=autocat','root',...) failed: Access denied for user: 'root@localhost' (Using password: YES) at E:\DOCUME~1\POSIX\LOCALS~1\Temp\dzprltmp.pl line 9

For help, please send mail to this site's webmaster, giving this error message and the time and date of the error.

За более подробной информацией обращайся к лог файлу.



--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
cosamia
Дата 7.6.2005, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 11.5.2005

Репутация: нет
Всего: нет



У меня так пишется код ошибки. И выводится строка подключения. Но я не хочу чтобы пользоатель все это видел. Как сделать чтобы он видел лишь некоторое мое сообщение?
То что я пишу после die "..." почему то не выводится. выводится только код ошибки и т.д.
PM   Вверх
Vaneska
Дата 7.6.2005, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 15.3.2005
Где: Москва

Репутация: 1
Всего: 4



Чтобы в браузер не выводилось сообщение, вместо die "Error: $DBI::errstr\n"
поставь функцию такого типа:

Код

sub Raport(){
  my ($data, $d, $file) = @_;
  local $/;
  
  $d ||= '';
  $file ||= 'default.rap'; # имя файла отчета
  
  if (open (RAPORT, ">>$file") ){
    print RAPORT 'time: '.localtime(time)." |> $data" . "\n";
    close RAPORT;
  }
  
  if ($d ne '') { die "Script error!"; }  
 
}

# изпользуй ее таким образом
my $dbh = DBI->connect("DBI:mysql:host=$host;database=$base", $log, $pass,    
                           { PrintError => 1, RaiseError => 1 } ) or &Raport("Error: $DBI::errstr", "yes");


Функция записывает в файл отчета ошибку и, если указан параметр $d, аварийно завершает программу с выводом строки "Script error!"

Это сообщение отредактировал(а) Vaneska - 7.6.2005, 15:53
--------------------
http://isokolov.blogspot.com/
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.0552 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.