c20.0046: database management systems lecture #20
DESCRIPTION
C20.0046: Database Management Systems Lecture #20. M.P. Johnson Stern School of Business, NYU Spring, 2005. Homework. Project part 4 due Thursday Topic: populating your tables with data Using MySQL’s bulk loader Start early! Turn in on time Project part 5 - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: C20.0046: Database Management Systems Lecture #20](https://reader033.vdocument.in/reader033/viewer/2022051518/56815e02550346895dcc48c9/html5/thumbnails/1.jpg)
M.P. Johnson, DBMS, Stern/NYU, Spring 2005
1
C20.0046: Database Management SystemsLecture #20
M.P. JohnsonStern School of Business, NYUSpring, 2005
![Page 2: C20.0046: Database Management Systems Lecture #20](https://reader033.vdocument.in/reader033/viewer/2022051518/56815e02550346895dcc48c9/html5/thumbnails/2.jpg)
M.P. Johnson, DBMS, Stern/NYU, Spring 2005
2
Homework Project part 4 due Thursday
Topic: populating your tables with data Using MySQL’s bulk loader Start early! Turn in on time
Project part 5 Topic: web interface + any remaining loose ends Assigned after Thursday Due: end of semester
![Page 3: C20.0046: Database Management Systems Lecture #20](https://reader033.vdocument.in/reader033/viewer/2022051518/56815e02550346895dcc48c9/html5/thumbnails/3.jpg)
M.P. Johnson, DBMS, Stern/NYU, Spring 2005
3
Agenda: Programming for SQL Have now been exposed to:
Embedded SQL: Pro*C Java JDBC Stored Procedures: PL/SQL
All used; good to know about
Most important for this course: DB-conn from web scripting languages DBI/DBDs in Perl, PHP
![Page 4: C20.0046: Database Management Systems Lecture #20](https://reader033.vdocument.in/reader033/viewer/2022051518/56815e02550346895dcc48c9/html5/thumbnails/4.jpg)
M.P. Johnson, DBMS, Stern/NYU, Spring 2005
4
Goals: after this week Understand dynamic webpages
1. CGI2. PHP-like scripting
Today: be able to post a hello-web Perl program in your sales account
This week: Be able to write simple dynamic webpages in
1. In Perl2. In PHP
that1. That do look-ups with user-entered parameters2. And display the results3. Based on examples from class
![Page 5: C20.0046: Database Management Systems Lecture #20](https://reader033.vdocument.in/reader033/viewer/2022051518/56815e02550346895dcc48c9/html5/thumbnails/5.jpg)
M.P. Johnson, DBMS, Stern/NYU, Spring 2005
5
New topic: web apps Goal: web front-end to database
Present dynamic content, on demand Not canned (static) pages/not canned queries (perhaps) modify DB on demand
Naïve soln: static webpage & HTTP index.html written, stored, put on server, displayed
when it’s url is requested HTTP is stateless (so?) This doesn’t solve our problem
![Page 6: C20.0046: Database Management Systems Lecture #20](https://reader033.vdocument.in/reader033/viewer/2022051518/56815e02550346895dcc48c9/html5/thumbnails/6.jpg)
M.P. Johnson, DBMS, Stern/NYU, Spring 2005
6
Dynamic webpages Soln 1: upon url request
1. somehow decide to dynamically generate an html page (from scratch)
2. send back new html page to user
No html file exists on server, just created on demand
CGI/Perl, Java servlets, etc.
![Page 7: C20.0046: Database Management Systems Lecture #20](https://reader033.vdocument.in/reader033/viewer/2022051518/56815e02550346895dcc48c9/html5/thumbnails/7.jpg)
M.P. Johnson, DBMS, Stern/NYU, Spring 2005
7
New topic: CGI First, and still very popular method CGI: Common Gateway Interface
Not a programming language! Just an interface (connection) between the
webserver and an outside program “Webserver” = webserver software, e.g., Apache
Very simple basic idea:1. user chooses an url22 webserver runs that url’s program,3. sends back the program’s output
![Page 8: C20.0046: Database Management Systems Lecture #20](https://reader033.vdocument.in/reader033/viewer/2022051518/56815e02550346895dcc48c9/html5/thumbnails/8.jpg)
M.P. Johnson, DBMS, Stern/NYU, Spring 2005
8
On-the-fly content with CGI
ProgramClient
Server
HTTP Request
Data for program
Generated HTML
HTML
Image from http://www.scit.wlv.ac.uk/~jphb/cp3024/
![Page 9: C20.0046: Database Management Systems Lecture #20](https://reader033.vdocument.in/reader033/viewer/2022051518/56815e02550346895dcc48c9/html5/thumbnails/9.jpg)
M.P. Johnson, DBMS, Stern/NYU, Spring 2005
9
Using CGI CGI works with any prog./scripting lang.
Really?
Well, no, not really…
![Page 10: C20.0046: Database Management Systems Lecture #20](https://reader033.vdocument.in/reader033/viewer/2022051518/56815e02550346895dcc48c9/html5/thumbnails/10.jpg)
M.P. Johnson, DBMS, Stern/NYU, Spring 2005
10
CGI works… if the webserver machine can run program
pages/soho, not sales and if the user the webserver is running as
(e.g. nobody) can can run your program and if the necessary jars/libraries are
available and if nobody has permission to use them and if the necessary DB software is installed
Plausible choices: Perl, Python, C, sh
![Page 11: C20.0046: Database Management Systems Lecture #20](https://reader033.vdocument.in/reader033/viewer/2022051518/56815e02550346895dcc48c9/html5/thumbnails/11.jpg)
M.P. Johnson, DBMS, Stern/NYU, Spring 2005
11
CGI admin Most webservers: CGI program/script must
either1. End in .cgi and/or2. Reside in cgi-bin
Ours: needs .cgi extension If an actual program, the cgi file is just the
name of the executable:
gcc -o myprog.cgi myproc.gcc
![Page 12: C20.0046: Database Management Systems Lecture #20](https://reader033.vdocument.in/reader033/viewer/2022051518/56815e02550346895dcc48c9/html5/thumbnails/12.jpg)
M.P. Johnson, DBMS, Stern/NYU, Spring 2005
12
CGI admin In a script, first (“shebang”) line says which
interpreter to use:
Either way, cgi file must be executable:
Make sure your cgi file runs at cmd prompt:
But not a guarantee!
#!/usr/local/bin/perl
sales% chmod +x *.cgi
sales% ./myprog.cgi
![Page 13: C20.0046: Database Management Systems Lecture #20](https://reader033.vdocument.in/reader033/viewer/2022051518/56815e02550346895dcc48c9/html5/thumbnails/13.jpg)
M.P. Johnson, DBMS, Stern/NYU, Spring 2005
13
CGI input CGI programs must respond to input Two mechanisms:
GET: read env. var. QUERY_STRING POST: get length from env. var.
CONTENT_LENGTH; read from STDIN This diff. mostly invis. to Perl, PHP Both send a sequence of name/value pairs,
separated by &s:
name=a&submit=Search
![Page 14: C20.0046: Database Management Systems Lecture #20](https://reader033.vdocument.in/reader033/viewer/2022051518/56815e02550346895dcc48c9/html5/thumbnails/14.jpg)
M.P. Johnson, DBMS, Stern/NYU, Spring 2005
14
CGI input Appearance/security differences GET: string is part of the URL, following a ?:
POST: string can be read by program from an environmental variable Vars not visible to the browser user Not automatically put in server log, etc.
http://pages.stern.nyu.edu/~mjohnson/dbms/perl/lookup.cgi
http://google.com
![Page 15: C20.0046: Database Management Systems Lecture #20](https://reader033.vdocument.in/reader033/viewer/2022051518/56815e02550346895dcc48c9/html5/thumbnails/15.jpg)
M.P. Johnson, DBMS, Stern/NYU, Spring 2005
15
Our use of CGI We’ll discuss CGI and Perl
One option for your project Can try C, C++, etc. But not recommended!
For CGI, only Perl will be “supported” Scripting languages v. programming languages Development v. IT Other languages are still not recommended
especially if you don’t know Perl and PHP
![Page 16: C20.0046: Database Management Systems Lecture #20](https://reader033.vdocument.in/reader033/viewer/2022051518/56815e02550346895dcc48c9/html5/thumbnails/16.jpg)
M.P. Johnson, DBMS, Stern/NYU, Spring 2005
16
New topic: Just Enough Perl Very popular, powerful scripting language Very good at “regular expressions”, text manipulation,
but not very relevant to us
Instead: simple text/html production Basic language constructs MySQL connectivity
Perl = Practical Extraction and Report Language= Pathologically Eclectic Rubbish Lister
perl -pi -e 's/tcsh/sh/' $HOME/.login
See http://perl.org.il/pipermail/perl/2003-February/001047.html
![Page 17: C20.0046: Database Management Systems Lecture #20](https://reader033.vdocument.in/reader033/viewer/2022051518/56815e02550346895dcc48c9/html5/thumbnails/17.jpg)
M.P. Johnson, DBMS, Stern/NYU, Spring 2005
17
hello.pl Hello, World - hello.pl
Running at command prompt:
#!/usr/bin/perl -w
print "Hello World\n";
sales% perl hello.plHello Worldsales%
![Page 18: C20.0046: Database Management Systems Lecture #20](https://reader033.vdocument.in/reader033/viewer/2022051518/56815e02550346895dcc48c9/html5/thumbnails/18.jpg)
M.P. Johnson, DBMS, Stern/NYU, Spring 2005
18
Hello, World - hello.pl Run from browser:
http://pages.stern.nyu.edu/~mjohnson/dbms/perl/hello.pl
What’s wrong? http://pages.stern.nyu.edu/~mjohnson/dbms/perl/hello.cgi
What’s wrong? http://pages.stern.nyu.edu/~mjohnson/dbms/perl/hello2.cgi
What’s wrong?
![Page 19: C20.0046: Database Management Systems Lecture #20](https://reader033.vdocument.in/reader033/viewer/2022051518/56815e02550346895dcc48c9/html5/thumbnails/19.jpg)
M.P. Johnson, DBMS, Stern/NYU, Spring 2005
19
Troubleshooting hello.cgi1. Get the extension right:
2. Try running with perl: Are there Perl errors?
3. Try running as program: Are the execute permissions on?
sales% perl hello.cgi
sales% ./hello.cgisales% chmod +x hello.cgi
sales% cp hello.pl hello.cgi
![Page 20: C20.0046: Database Management Systems Lecture #20](https://reader033.vdocument.in/reader033/viewer/2022051518/56815e02550346895dcc48c9/html5/thumbnails/20.jpg)
M.P. Johnson, DBMS, Stern/NYU, Spring 2005
20
Troubleshooting hello.cgi5. Make sure you’re printing the HTML header
#! /usr/bin/perl -w
print "Content-type: text/html\n\n";
print "Hello World\n";
![Page 21: C20.0046: Database Management Systems Lecture #20](https://reader033.vdocument.in/reader033/viewer/2022051518/56815e02550346895dcc48c9/html5/thumbnails/21.jpg)
M.P. Johnson, DBMS, Stern/NYU, Spring 2005
21
Troubleshooting hello.cgi5. Show errors and warnings:
http://pages.stern.nyu.edu/~mjohnson/dbms/perl/hello3.cgi Is case-sensitive
#! /usr/bin/perl -w
use CGI qw(:standard);use CGI::Carp qw( fatalsToBrowser
warningsToBrowser );
print header();pr int "Hello World\n";
![Page 22: C20.0046: Database Management Systems Lecture #20](https://reader033.vdocument.in/reader033/viewer/2022051518/56815e02550346895dcc48c9/html5/thumbnails/22.jpg)
M.P. Johnson, DBMS, Stern/NYU, Spring 2005
22
Perl and HTML headers Data sent to a browser is prefaced with a
header describe type of data:
Hand-generated html must print this before anything else:
Or: When use-ing CGI
Content-type: text/html\n\n
print "Content-type: text/html\n\n";
print CGI::header();
![Page 23: C20.0046: Database Management Systems Lecture #20](https://reader033.vdocument.in/reader033/viewer/2022051518/56815e02550346895dcc48c9/html5/thumbnails/23.jpg)
M.P. Johnson, DBMS, Stern/NYU, Spring 2005
23
Perl, HTML, and CGI.pm CGI.pm offers a “front-end” to HTML
Replaces mark-up language with an API
Very simple example: http://pages.stern.nyu.edu/~mjohnson/dbms/perl/
cgipm.pl http://pages.stern.nyu.edu/~mjohnson/dbms/perl/
cgipm.cgi
Somewhat simpler, but another thing to learn Mostly won’t cover Review: Hello, World
![Page 24: C20.0046: Database Management Systems Lecture #20](https://reader033.vdocument.in/reader033/viewer/2022051518/56815e02550346895dcc48c9/html5/thumbnails/24.jpg)
M.P. Johnson, DBMS, Stern/NYU, Spring 2005
24
More on Perl Perl is mostly “C-like” Perl is case-sensitive Use # for rest-of-line comments Creation of functions is supported but optional
Like PL/SQL Perl has “modules”/“packages” CGI module:
Provides header() function, easy access to CGI params Mysql module:
use CGI qw(:standard);
use Mysql;
![Page 25: C20.0046: Database Management Systems Lecture #20](https://reader033.vdocument.in/reader033/viewer/2022051518/56815e02550346895dcc48c9/html5/thumbnails/25.jpg)
M.P. Johnson, DBMS, Stern/NYU, Spring 2005
25
Perl and strings Can use “ ” for strings Concatenate with . op:
Print text with print function:
Or, parentheses can be dropped!
“Hi ” . “there\n”
print (“Hi there”);
print “Hi there”;
![Page 26: C20.0046: Database Management Systems Lecture #20](https://reader033.vdocument.in/reader033/viewer/2022051518/56815e02550346895dcc48c9/html5/thumbnails/26.jpg)
M.P. Johnson, DBMS, Stern/NYU, Spring 2005
26
Perl and strings Can compare numbers (as numbers) with
usual operators < > <=, etc. 3 < 5
These do not apply to strings String ops are based on initials of operations:
eq, ne, lt, gt, le, ge “hi” ne “there” “hi” le “hi there”
![Page 27: C20.0046: Database Management Systems Lecture #20](https://reader033.vdocument.in/reader033/viewer/2022051518/56815e02550346895dcc48c9/html5/thumbnails/27.jpg)
M.P. Johnson, DBMS, Stern/NYU, Spring 2005
27
Perl and variables All regular variables begin with $
$input, $query Declare vars with my:
Q: What about var types? A: Perl is loosely typed!
my $s = "hi";my $query = "select …";
my $s = "hi";$s = 10;$s = 3.5;
![Page 28: C20.0046: Database Management Systems Lecture #20](https://reader033.vdocument.in/reader033/viewer/2022051518/56815e02550346895dcc48c9/html5/thumbnails/28.jpg)
M.P. Johnson, DBMS, Stern/NYU, Spring 2005
28
Perl, strings, and variables print takes var-many arguments:
Variables are always “escaped”
Vars may appear within strings:
Prints out: Hello Dolly. To prevent escaping, use single quotes '$name‘
$name = "Dolly";
print ("Hello $name.\n");
print ("Hello ", "Dolly", ".\n");
![Page 29: C20.0046: Database Management Systems Lecture #20](https://reader033.vdocument.in/reader033/viewer/2022051518/56815e02550346895dcc48c9/html5/thumbnails/29.jpg)
M.P. Johnson, DBMS, Stern/NYU, Spring 2005
29
Perl syntax examples Access member/field of object ::
object::member Access member pointed to by object ->
rowhash->field Can access array members with indices Can access hash members with strings
http://pages.stern.nyu.edu/~mjohnson/dbms/perl/controls.cgi http://pages.stern.nyu.edu/~mjohnson/dbms/perl/controlscgi.txt
![Page 30: C20.0046: Database Management Systems Lecture #20](https://reader033.vdocument.in/reader033/viewer/2022051518/56815e02550346895dcc48c9/html5/thumbnails/30.jpg)
M.P. Johnson, DBMS, Stern/NYU, Spring 2005
30
Tutorials on Perl Some material drawn from the following good tutorials: http://perl.com
CGI backend programming using perl: http://www.scit.wlv.ac.uk/~jphb/sst/perl/
Perl Basics: http://www.cs.wcupa.edu/~rkline/Perl/perl-basics-1.html
CGI Basics: http://www.cs.wcupa.edu/~rkline/Perl/cgi-basics-1.html
MySQL/Perl/CGI example: http://www.scit.wlv.ac.uk/~jphb/sst/perl/ex3d.html
![Page 31: C20.0046: Database Management Systems Lecture #20](https://reader033.vdocument.in/reader033/viewer/2022051518/56815e02550346895dcc48c9/html5/thumbnails/31.jpg)
M.P. Johnson, DBMS, Stern/NYU, Spring 2005
31
Tutorials on PHP Some material drawn from the following good tutorials: http://php.net
PHP introduction and examples: http://www.scit.wlv.ac.uk/~jphb/sst/php/
Interactive PHP with database access: http://www.scit.wlv.ac.uk/~jphb/sst/php/gazdb.html
Longer PHP/MySQL Tutorial from webmonkey: http://hotwired.lycos.com/webmonkey/99/21/index2a.html
Nice insert/update/delete example from webmonkey: http://hotwired.lycos.com/webmonkey/99/21/index3a.html
MySQL/Perl/PHP page from U-Wash: http://www.washington.edu/computing/web/publishing/mysql-script.html
![Page 32: C20.0046: Database Management Systems Lecture #20](https://reader033.vdocument.in/reader033/viewer/2022051518/56815e02550346895dcc48c9/html5/thumbnails/32.jpg)
M.P. Johnson, DBMS, Stern/NYU, Spring 2005
32
For next time…1. Go through at least one tutorial each on Perl and
PHP2. Try posting a hello-web Perl script in your sales
account
3. Run/read these:
http://pages.stern.nyu.edu/~mjohnson/dbms/perl/controls.cgi http://pages.stern.nyu.edu/~mjohnson/dbms/perl/controlscgi.txt
http://pages.stern.nyu.edu/~mjohnson/dbms/perl/lookup.cgi http://pages.stern.nyu.edu/~mjohnson/dbms/perl/lookupcgi.txt