1 / 22

Programming MySQL, Perl

Programming MySQL, Perl. COEN 351. Reading List. Paul DuBois: MySQL and Perl for the Web, New Riders, 2002 Jacqueline D. Hamilton: CGI Programming 101, 2004. Checking Your Installation. Use this script to check whether cgi and dbi are installed: You should see mysql among the output.

idana
Download Presentation

Programming MySQL, Perl

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

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: • 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 fetchrow_array () returns an array #! 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();

  12. Alternative Row Retrieval Methods fetchrow_arrayref() returns reference to an array #! 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();

  13. Alternative Row Retrieval Methods fetchrow_hashref () returns reference to an hash #! 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();

  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

More Related