programming mysql, perl coen 351. reading list paul dubois: mysql and perl for the web, new riders,...
TRANSCRIPT
![Page 1: Programming MySQL, Perl COEN 351. Reading List Paul DuBois: MySQL and Perl for the Web, New Riders, 2002 Jacqueline D. Hamilton: CGI Programming 101,](https://reader035.vdocument.in/reader035/viewer/2022081514/551a3f23550346a4248b5a35/html5/thumbnails/1.jpg)
Programming MySQL, Perl
COEN 351
![Page 2: Programming MySQL, Perl COEN 351. Reading List Paul DuBois: MySQL and Perl for the Web, New Riders, 2002 Jacqueline D. Hamilton: CGI Programming 101,](https://reader035.vdocument.in/reader035/viewer/2022081514/551a3f23550346a4248b5a35/html5/thumbnails/2.jpg)
Reading List
Paul DuBois: MySQL and Perl for the Web, New Riders, 2002
Jacqueline D. Hamilton: CGI Programming 101, 2004
![Page 3: Programming MySQL, Perl COEN 351. Reading List Paul DuBois: MySQL and Perl for the Web, New Riders, 2002 Jacqueline D. Hamilton: CGI Programming 101,](https://reader035.vdocument.in/reader035/viewer/2022081514/551a3f23550346a4248b5a35/html5/thumbnails/3.jpg)
Checking Your Installation
Use this script to check whether cgi and dbi are installed:
You should see mysql among the output.
#! c:/Perl/bin/perl.exe
use CGI;use DBI;$cgi=new CGI;print "CGI object was successfully created\n";@driverNames = DBI->available_drivers();print "These drivers are available: @driverNames\n";exit(0);
![Page 4: Programming MySQL, Perl COEN 351. Reading List Paul DuBois: MySQL and Perl for the Web, New Riders, 2002 Jacqueline D. Hamilton: CGI Programming 101,](https://reader035.vdocument.in/reader035/viewer/2022081514/551a3f23550346a4248b5a35/html5/thumbnails/4.jpg)
Connecting to the Database
Create database and table In MySQL command line:
CREATE DATABASE example1; USE example1; CREATE TABLE nlwest(name varchar(20), wins int, losses int);
SHOW TABLES; DESCRIBE nlwest;
INSERT INTO nlwest VALUES ('Los Angeles',13,8), ('San Francisco', 11, 8), ('San Diego',12,9), ('Arizona', 11, 11), ('Colorado', 9, 13); SELECT * FROM nlwest;
http://dev.mysql.com/doc/refman/5.0/en/
![Page 5: Programming MySQL, Perl COEN 351. Reading List Paul DuBois: MySQL and Perl for the Web, New Riders, 2002 Jacqueline D. Hamilton: CGI Programming 101,](https://reader035.vdocument.in/reader035/viewer/2022081514/551a3f23550346a4248b5a35/html5/thumbnails/5.jpg)
Connecting to the Database#! c:/perl/bin/perl.exeuse strict;use DBI;
my $dbh = DBI->connect ("DBI:mysql:host=localhost;database=example1",
"root", "none");my $sth = $dbh->prepare("SELECT name, wins, losses FROM nlwest");$sth->execute();my $count=0;while( my @val = $sth->fetchrow_array ()) {
printf("name = %s, wins = %d, losses = %d\n",$val[0], $val[1], $val[2]);
$count++;}print "$count teams total\n";$sth->finish();$dbh->disconnect();
DBI Class Method connect
$dbh = DBI->connect($data_source, $username, $password) or die $DBI::errstr;
$dbh = DBI->connect($data_source, $username, $password, \%attr) or die $DBI::errstr;
http://search.cpan.org/~timb/DBI-1.42/DBI.pm#THE_DBI_PACKAGE_AND_CLASS
![Page 6: Programming MySQL, Perl COEN 351. Reading List Paul DuBois: MySQL and Perl for the Web, New Riders, 2002 Jacqueline D. Hamilton: CGI Programming 101,](https://reader035.vdocument.in/reader035/viewer/2022081514/551a3f23550346a4248b5a35/html5/thumbnails/6.jpg)
Connecting to the Database#! c:/perl/bin/perl.exeuse strict;use DBI;
my $dbh = DBI->connect ("DBI:mysql:host=localhost;database=example1",
"root", "none");my $sth = $dbh->prepare("SELECT name, wins, losses FROM nlwest");$sth->execute();my $count=0;while( my @val = $sth->fetchrow_array ()) {
printf("name = %s, wins = %d, losses = %d\n",$val[0], $val[1], $val[2]);
$count++;}print "$count teams total\n";$sth->finish();$dbh->disconnect();
DBI Class Method prepare
$sth = $dbh->prepare($statement) or die $dbh->errstr; $sth = $dbh->prepare($statement, \%attr) or die $dbh->errstr;
Prepares a statement for later execution by the database engine and returns a reference to a statement handle object.
![Page 7: Programming MySQL, Perl COEN 351. Reading List Paul DuBois: MySQL and Perl for the Web, New Riders, 2002 Jacqueline D. Hamilton: CGI Programming 101,](https://reader035.vdocument.in/reader035/viewer/2022081514/551a3f23550346a4248b5a35/html5/thumbnails/7.jpg)
Connecting to the Database#! c:/perl/bin/perl.exeuse strict;use DBI;
my $dbh = DBI->connect ("DBI:mysql:host=localhost;database=example1",
"root", "none");my $sth = $dbh->prepare("SELECT name, wins, losses FROM nlwest");$sth->execute();my $count=0;while( my @val = $sth->fetchrow_array ()) {
printf("name = %s, wins = %d, losses = %d\n",$val[0], $val[1], $val[2]);
$count++;}print "$count teams total\n";$sth->finish();$dbh->disconnect();
DBI Class Method execute
$rv = $sth->execute or die $sth->errstr; $rv = $sth->execute(@bind_values) or die $sth->errstr;
Perform whatever processing is necessary to execute the prepared statement.
![Page 8: Programming MySQL, Perl COEN 351. Reading List Paul DuBois: MySQL and Perl for the Web, New Riders, 2002 Jacqueline D. Hamilton: CGI Programming 101,](https://reader035.vdocument.in/reader035/viewer/2022081514/551a3f23550346a4248b5a35/html5/thumbnails/8.jpg)
Connecting to the Database#! c:/perl/bin/perl.exeuse strict;use DBI;
my $dbh = DBI->connect ("DBI:mysql:host=localhost;database=example1",
"root", "none");my $sth = $dbh->prepare("SELECT name, wins, losses FROM nlwest");$sth->execute();my $count=0;while( my @val = $sth->fetchrow_array ()) {
printf("name = %s, wins = %d, losses = %d\n",$val[0], $val[1], $val[2]);
$count++;}print "$count teams total\n";$sth->finish();$dbh->disconnect();
DBI Class Method fetchrow_array ()
$ary_ref = $sth->fetchrow_arrayref; $ary_ref = $sth->fetch; # alias
Fetches the next row of data and returns a reference to an array holding the field values. Null fields are returned as undef values in the array.
![Page 9: Programming MySQL, Perl COEN 351. Reading List Paul DuBois: MySQL and Perl for the Web, New Riders, 2002 Jacqueline D. Hamilton: CGI Programming 101,](https://reader035.vdocument.in/reader035/viewer/2022081514/551a3f23550346a4248b5a35/html5/thumbnails/9.jpg)
Connecting to the Database#! c:/perl/bin/perl.exeuse strict;use DBI;
my $dbh = DBI->connect ("DBI:mysql:host=localhost;database=example1",
"root", "none");my $sth = $dbh->prepare("SELECT name, wins, losses FROM nlwest");$sth->execute();my $count=0;while( my @val = $sth->fetchrow_array ()) {
printf("name = %s, wins = %d, losses = %d\n",$val[0], $val[1], $val[2]);
$count++;}print "$count teams total\n";$sth->finish();$dbh->disconnect();
DBI Class Method disconnect
$rc = $dbh->disconnect or warn $dbh->errstr;
Disconnects the database from the database handle. disconnect is typically only used before exiting the program. The handle is of little use after disconnecting.
Sample Script
![Page 10: Programming MySQL, Perl COEN 351. Reading List Paul DuBois: MySQL and Perl for the Web, New Riders, 2002 Jacqueline D. Hamilton: CGI Programming 101,](https://reader035.vdocument.in/reader035/viewer/2022081514/551a3f23550346a4248b5a35/html5/thumbnails/10.jpg)
Alternative Row Retrieval Methods
fetchrow_array()Returns an array
fetchrow_arrayref()Returns a reference to an array
fetchrow_hashref()Returns a reference to an hash
![Page 11: Programming MySQL, Perl COEN 351. Reading List Paul DuBois: MySQL and Perl for the Web, New Riders, 2002 Jacqueline D. Hamilton: CGI Programming 101,](https://reader035.vdocument.in/reader035/viewer/2022081514/551a3f23550346a4248b5a35/html5/thumbnails/11.jpg)
Alternative Row Retrieval Methods#! c:/perl/bin/perl.exeuse strict;use DBI;use CGI qw(:standard :html3);
print header(), start_html("MLB");my $dbh = DBI->connect ("DBI:mysql:host=localhost;database=example1",
"root", "none");my $sth = $dbh->prepare("SELECT name, wins, losses FROM nlwest");$sth->execute();
my @headings = ('Team','Wins','Losses');my @rows = th(\@headings);
while( my @val = $sth->fetchrow_array ()) {push(@rows,td([$val[0],$val[1],$val[2]]));
}print table({-width=>'50%', -align=>'center'},caption(b('NL WEST')),
Tr(\@rows));print end_html();$sth->finish();$dbh->disconnect();
fetchrow_array ()
returns an array
![Page 12: Programming MySQL, Perl COEN 351. Reading List Paul DuBois: MySQL and Perl for the Web, New Riders, 2002 Jacqueline D. Hamilton: CGI Programming 101,](https://reader035.vdocument.in/reader035/viewer/2022081514/551a3f23550346a4248b5a35/html5/thumbnails/12.jpg)
Alternative Row Retrieval Methods#! c:/perl/bin/perl.exeuse strict;use DBI;use CGI qw(:standard :html3);
print header(), start_html("MLB");my $dbh = DBI->connect ("DBI:mysql:host=localhost;database=example1",
"root", "none");my $sth = $dbh->prepare("SELECT name, wins, losses FROM nlwest");$sth->execute();
my @headings = ('Team','Wins','Losses');my @rows = th(\@headings);
while( my $ref = $sth->fetchrow_arrayref ()) {push(@rows,td([$ref->[0],$ref->[1],$ref->[2]]));
}print table({-width=>'50%', -align=>'center'},caption(b('NL WEST')),
Tr(\@rows));print end_html();$sth->finish();$dbh->disconnect();
fetchrow_arrayref()
returns reference to an array
![Page 13: Programming MySQL, Perl COEN 351. Reading List Paul DuBois: MySQL and Perl for the Web, New Riders, 2002 Jacqueline D. Hamilton: CGI Programming 101,](https://reader035.vdocument.in/reader035/viewer/2022081514/551a3f23550346a4248b5a35/html5/thumbnails/13.jpg)
Alternative Row Retrieval Methods#! c:/perl/bin/perl.exeuse strict;use DBI;use CGI qw(:standard :html3);
print header(), start_html("MLB");my $dbh = DBI->connect ("DBI:mysql:host=localhost;database=example1",
"root", "none");my $sth = $dbh->prepare("SELECT name, wins, losses FROM nlwest");$sth->execute();
my @headings = ('Team','Wins','Losses');my @rows = th(\@headings);
while( my $ref = $sth->fetchrow_hashref()) {push(@rows,td([$ref->{name}, $ref->{wins}, $ref->{losses}]));
}print table({-width=>'50%', -align=>'center'},caption(b('NL WEST')),
Tr(\@rows));print end_html();$sth->finish();$dbh->disconnect();
fetchrow_hashref ()
returns reference to an hash
![Page 14: Programming MySQL, Perl COEN 351. Reading List Paul DuBois: MySQL and Perl for the Web, New Riders, 2002 Jacqueline D. Hamilton: CGI Programming 101,](https://reader035.vdocument.in/reader035/viewer/2022081514/551a3f23550346a4248b5a35/html5/thumbnails/14.jpg)
Letter-Case Variation#! c:/perl/bin/perl.exeuse strict;use DBI;use CGI qw(:standard :html3);
print header(), start_html("MLB");my $dbh = DBI->connect ("DBI:mysql:host=localhost;database=example1",
"root", "none",{PrintError => 0, RaiseError => 1} );my $sth = $dbh->prepare("SELECT name, wins, losses FROM nlwest");$sth->execute();
my @headings = ('Team','Wins','Losses');my @rows = th(\@headings);
while( my $ref = $sth->fetchrow_hashref( 'NAME_lc')) {push(@rows,td([$ref->{name}, $ref->{wins}, $ref->{losses}]));
}print table({-width=>'50%', -align=>'center'},caption(b('NL WEST')),
Tr(\@rows));print end_html();$sth->finish();$dbh->disconnect();
MySQL is not case specific, but Perl is.
When using field names, this parameter forces the names to be lower case.
Use NAME-uc to force the names to be upper case.
![Page 15: Programming MySQL, Perl COEN 351. Reading List Paul DuBois: MySQL and Perl for the Web, New Riders, 2002 Jacqueline D. Hamilton: CGI Programming 101,](https://reader035.vdocument.in/reader035/viewer/2022081514/551a3f23550346a4248b5a35/html5/thumbnails/15.jpg)
High-Level Retrieval Methods
Low level access usesprepare()execute() fetch loop finish()
New versions of DBI have
![Page 16: Programming MySQL, Perl COEN 351. Reading List Paul DuBois: MySQL and Perl for the Web, New Riders, 2002 Jacqueline D. Hamilton: CGI Programming 101,](https://reader035.vdocument.in/reader035/viewer/2022081514/551a3f23550346a4248b5a35/html5/thumbnails/16.jpg)
High-Level Retrieval Methods#! c:/perl/bin/perl.exeuse strict;use DBI;use CGI qw(:standard :html3);
print header(), start_html("MLB");my $dbh = DBI->connect ("DBI:mysql:host=localhost;database=example1",
"root", "none",{PrintError => 0, RaiseError => 1} ) or die "error";my @row = $dbh->selectrow_array("SELECT name, wins, losses FROM nlwest");print "The leader is $row[0]" if @row;print end_html();$dbh->disconnect();
selectrow_array returns a complete row in a Perl row context.
selectrow_array returns the first column value in a Perl scalar context.
![Page 17: Programming MySQL, Perl COEN 351. Reading List Paul DuBois: MySQL and Perl for the Web, New Riders, 2002 Jacqueline D. Hamilton: CGI Programming 101,](https://reader035.vdocument.in/reader035/viewer/2022081514/551a3f23550346a4248b5a35/html5/thumbnails/17.jpg)
High-Level Retrieval Methods#! c:/perl/bin/perl.exeuse strict;use DBI;use CGI qw(:standard :html3);
print header(), start_html("MLB");my $dbh = DBI->connect ("DBI:mysql:host=localhost;database=example1",
"root", "none",{PrintError => 0, RaiseError => 1} ) or die "error";my $ref = $dbh->selectcol_arrayref ("SELECT name FROM nlwest");print "The teams in order are @{$ref}\n" if defined ($ref);print end_html();$dbh->disconnect();
selectcol_arrayref returns a complete column in a Perl row context.
If the query has no result, it returns an empty list or ‘undef’
![Page 18: Programming MySQL, Perl COEN 351. Reading List Paul DuBois: MySQL and Perl for the Web, New Riders, 2002 Jacqueline D. Hamilton: CGI Programming 101,](https://reader035.vdocument.in/reader035/viewer/2022081514/551a3f23550346a4248b5a35/html5/thumbnails/18.jpg)
High-Level Retrieval Methods#! c:/perl/bin/perl.exeuse strict;use DBI;use CGI qw(:standard :html3);
print header(), start_html("MLB");my $dbh = DBI->connect ("DBI:mysql:host=localhost;database=example1",
"root", "none",{PrintError => 0, RaiseError => 1} ) or die "error";my $ref = $dbh->selectall_arrayref("SELECT name, wins, losses FROM nlwest");my @headings = ('Team','Wins','Losses');my @rows = th(\@headings);foreach my $row_ref (@{$ref}) {
push(@rows,td([$row_ref->[0], $row_ref->[1], $row_ref->[2] ]));}print table({-border=>'1', -width=>'50%', -align=>'center'},caption(b('NL WEST')),
Tr(\@rows) );
print end_html();$dbh->disconnect(); selectall_arrayref returns all values as a matrix.
All methods die if “RaiseError” is enabled
![Page 19: Programming MySQL, Perl COEN 351. Reading List Paul DuBois: MySQL and Perl for the Web, New Riders, 2002 Jacqueline D. Hamilton: CGI Programming 101,](https://reader035.vdocument.in/reader035/viewer/2022081514/551a3f23550346a4248b5a35/html5/thumbnails/19.jpg)
Modifying the database
do() To issue a query that does not return rows
do() returns number of rows affected or undef for an error. If RaiseError is enabled, you do not need to
check
![Page 20: Programming MySQL, Perl COEN 351. Reading List Paul DuBois: MySQL and Perl for the Web, New Riders, 2002 Jacqueline D. Hamilton: CGI Programming 101,](https://reader035.vdocument.in/reader035/viewer/2022081514/551a3f23550346a4248b5a35/html5/thumbnails/20.jpg)
Modifying the database#! c:/perl/bin/perl.exeuse strict;use DBI;use CGI qw(:standard :html3);
print header(), start_html("MLB");my $dbh = DBI->connect ("DBI:mysql:host=localhost;database=example1",
"root", "none",{PrintError => 0, RaiseError => 1} ) or die "error";$dbh->do ("INSERT INTO nlwest (name, wins, losses)
VALUES('San Francisco',12,8)" );my $ref = $dbh->selectall_arrayref("SELECT name, wins, losses FROM nlwest");my @headings = ('Team','Wins','Losses');my @rows = th(\@headings);foreach my $row_ref (@{$ref}) {
push(@rows,td([$row_ref->[0], $row_ref->[1], $row_ref->[2] ]));}print table({-border=>'1', -width=>'50%', -align=>'center'},caption(b('NL WEST')),
Tr(\@rows) );
print end_html();$dbh->disconnect();
do() to insert a row
![Page 21: Programming MySQL, Perl COEN 351. Reading List Paul DuBois: MySQL and Perl for the Web, New Riders, 2002 Jacqueline D. Hamilton: CGI Programming 101,](https://reader035.vdocument.in/reader035/viewer/2022081514/551a3f23550346a4248b5a35/html5/thumbnails/21.jpg)
Modifying the database#! c:/perl/bin/perl.exeuse strict;use DBI;use CGI qw(:standard :html3);
print header(), start_html("MLB");my $dbh = DBI->connect ("DBI:mysql:host=localhost;database=example1",
"root", "none",{PrintError => 0, RaiseError => 1} ) or die "error";$dbh->do ("INSERT INTO nlwest (name, wins, losses)
VALUES('San Francisco',12,8)" );my $ref = $dbh->selectall_arrayref("SELECT name, wins, losses FROM nlwest");my @headings = ('Team','Wins','Losses');my @rows = th(\@headings);foreach my $row_ref (@{$ref}) {
push(@rows,td([$row_ref->[0], $row_ref->[1], $row_ref->[2] ]));}print table({-border=>'1', -width=>'50%', -align=>'center'},caption(b('NL WEST')),
Tr(\@rows) );
print end_html();$dbh->disconnect();
do() to insert a row
![Page 22: Programming MySQL, Perl COEN 351. Reading List Paul DuBois: MySQL and Perl for the Web, New Riders, 2002 Jacqueline D. Hamilton: CGI Programming 101,](https://reader035.vdocument.in/reader035/viewer/2022081514/551a3f23550346a4248b5a35/html5/thumbnails/22.jpg)
Modifying the databaseuse DBI;use CGI qw(:standard :html3);
sub updateWinsAndLosses{
my ($dbh, $winner, $looser) = @_;$dbh->do ( "UPDATE nlwest SET wins = wins + 1 WHERE name = ?", undef, $winner);$dbh->do ( " UPDATE nlwest SET losses = losses + 1 WHERE name = ?",
undef, $looser);}
print header(), start_html("MLB");my $dbh = DBI->connect ("DBI:mysql:host=localhost;database=example1",
"root", "none",{PrintError => 0, RaiseError => 1} ) or die "error";&updateWinsAndLosses($dbh, 'San Francisco', 'Los Angeles');my $ref = $dbh->selectall_arrayref("SELECT name, wins, losses FROM nlwest");my @headings = ('Team','Wins','Losses');my @rows = th(\@headings);foreach my $row_ref (@{$ref}) {
push(@rows,td([$row_ref->[0], $row_ref->[1], $row_ref->[2] ]));}
do() to change values