available_drivers(); print "These drivers are exit(0);"> available_drivers(); print "These drivers are exit(0);">

Presentation is loading. Please wait.

Presentation is loading. Please wait.

Programming MySQL, Perl COEN 351. Reading List Paul DuBois: MySQL and Perl for the Web, New Riders, 2002 Jacqueline D. Hamilton: CGI Programming 101,

Similar presentations


Presentation on theme: "Programming MySQL, Perl COEN 351. Reading List Paul DuBois: MySQL and Perl for the Web, New Riders, 2002 Jacqueline D. Hamilton: CGI Programming 101,"— Presentation transcript:

1 Programming MySQL, Perl COEN 351

2 Reading List Paul DuBois: MySQL and Perl for the Web, New Riders, 2002 Jacqueline D. Hamilton: CGI Programming 101, 2004

3 Checking Your Installation Use this script to check whether cgi and dbi are installed:script 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);

4 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/

5 Connecting to the Database #! c:/perl/bin/perl.exe use 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

6 Connecting to the Database #! c:/perl/bin/perl.exe use 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.

7 Connecting to the Database #! c:/perl/bin/perl.exe use 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.

8 Connecting to the Database #! c:/perl/bin/perl.exe use 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.

9 Connecting to the Database #! c:/perl/bin/perl.exe use 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

10 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

11 Alternative Row Retrieval Methods #! c:/perl/bin/perl.exe use 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

12 Alternative Row Retrieval Methods #! c:/perl/bin/perl.exe use 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

13 Alternative Row Retrieval Methods #! c:/perl/bin/perl.exe use 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

14 Letter-Case Variation #! c:/perl/bin/perl.exe use 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.

15 High-Level Retrieval Methods Low level access uses prepare() execute() fetch loop finish() New versions of DBI have

16 High-Level Retrieval Methods #! c:/perl/bin/perl.exe use 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.

17 High-Level Retrieval Methods #! c:/perl/bin/perl.exe use 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

18 High-Level Retrieval Methods #! c:/perl/bin/perl.exe use 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

19 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

20 Modifying the database #! c:/perl/bin/perl.exe use 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

21 Modifying the database #! c:/perl/bin/perl.exe use 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

22 Modifying the database use 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


Download ppt "Programming MySQL, Perl COEN 351. Reading List Paul DuBois: MySQL and Perl for the Web, New Riders, 2002 Jacqueline D. Hamilton: CGI Programming 101,"

Similar presentations


Ads by Google