Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical
 
PerlMonks  

Re: Using DBI to make connection to a database

by soonix (Canon)
on Jul 03, 2015 at 10:10 UTC ( [id://1133062]=note: print w/replies, xml ) Need Help??


in reply to Using DBI to make connection to a database

$DSN= 'dbi:DriverName:database=$db;host=$host;port=$port;'
This won't work as you want. See Quote and Quote-like Operators in perlop. Generally, it's a good idea to add print statements as per Corion's advice. Not only for the DSN, also later for SQL statements. Instead of
$sth = $dbh->do('SELECT whatever ...');
it's better do write
my $sql = 'SELECT whatever ...'; print "Statement: [$sql\n]"; $sth = $dbh->do($sql);
I myself prefer
use Data::Dumper; ... my $sql = 'SELECT whatever ...'; print Dumper $sql; my $sth = $dbh->prepare($sql) or die "prepare failed: ', $DBI::errstr; ...
because if I have a reference somewhere, I see directly what that points to.

Replies are listed 'Best First'.
Re^2: Using DBI to make connection to a database
by Tux (Canon) on Jul 03, 2015 at 11:51 UTC

    That is bad advice!

    Please do not create SQL statements with fixed strings and do (remember bobby?)

    I agree with the wrong quotes being used (of course). Shell quotes are not perl quotes on Windows at least.

    If you want to see the statement used when something fails, use the appropriate means:

    my $dbh = DBI->connect ("dbi:Pg:", $user, $pass, { RaiseError => 1, PrintError => 1, ShowErrorStatement => 1, }) or die $DBI::errstr; my $sth = $dbh->prepare ("select foo from bar where boom = ?"); $sth->execute (1);

    Enjoy, Have FUN! H.Merijn

      I did not intend to advise creating SQL with fixed strings if you have variable parts. This was just an example (and didn't contain any variables in the SQL).

      And if you have things like q(SELECT ConfigValue FROM ConfigTable WHERE ConfigKey = 'ScreenWidth'), where you have neither placeholder nor variable interpolation, then there's other problems than simply the fixed string :-)

      Plus in the "I prefer" part I used prepare anyway…

      Update: Of course, $dbh->do("SELECT ... is very bad practice per se, because SELECT COUNT(*) ... usually is more efficient ;-) (see do in DBI) … used it for illustration purposes only.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1133062]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others goofing around in the Monastery: (3)
As of 2024-04-25 19:49 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found