Hi Ilya.  Even though this isn't a mod_perl issue....  you should be able
to open your database connection within your constructor.  You also could
maybe call an internal method from within your constructor that opens the
db connection and checks for the existence of 'id'.

- Sean

On Tue, 21 Nov 2000, Ilya Soldatkin wrote:

> I  am creating an object that make queries to database. But how shall I
> explain to him what database handler he shall use?
> Under mod_perl it is too dangerous to make $dbh global variable.
> Well, I can create data field in this object that will store current $dbh,
> but it seems too strange too me to have such data field in object:
> 
> $person={
> name=>'Jack',
> age=10,
> ...,
> $dbh=>...
> }
> 
> $dbh have no relation to information about Jack.
> Is there any better solution?
> 
> There is some piece of code
> -------------------
> mainscript.pl
> ....
> 
> my $dsn = "DBI:$config{'driver'}:database=$config{'dbname'};";
> my $dbh = DBI->connect($dsn, $config{'user'}, $config{'pass'});
> ....
> some SQL queries
> ......
> 
> $guest=new Person($dbh,$id);
> print <<END
> Guest name:$guest->name;
> Guest age:$guest->age;
> END
> ;
> ......
> 
> ------------------
> Person.pm
> 
> Package Person;
> use strict;
> 
> sub new
>  {
> my ($that, $dbh, $id) = @_;
> my $class =ref($that)||$that;
> my $table ='SITE';
> 
> my $sth = $dbh->prepare( qq{SELECT * FROM $table where id=?});
> if (!$sth) { die "Error:" . $dbh->errstr . "\n"; }
> if (!$sth->execute($id)) { die "Error:" . $sth->errstr . "\n";}
> 
>  if (my $ref = $sth->fetchrow_hashref)
>   {
>     my $person->{'name'}=$ref->{'name'};
>     my $person->{'age'}=$ref->{'age'};
>     .......
>   }
> 
> bless $person, $that;
> return $person;
> 
> }
> .... others methods
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to