Download PhP MySQL - Mark Dixon`s web site

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts

Microsoft Jet Database Engine wikipedia , lookup

Clusterpoint wikipedia , lookup

Microsoft SQL Server wikipedia , lookup

SQL wikipedia , lookup

Relational model wikipedia , lookup

Database model wikipedia , lookup

Open Database Connectivity wikipedia , lookup

Object-relational impedance mismatch wikipedia , lookup

Transcript
21 – Persistent data storage:
relational databases and MySQL
Mark Dixon
Page 1
Questions: Session variables
• Write a line of code to put 59 into a session
variable called score.
$_SESSION["score"] = 59
• Write code that
adds 1 to a variable called g,
when a session variable called i is over 25.
if($_SESSION["i"] > 25){
$g = $g + 1
}
Mark Dixon
Page 2
Admin: SQL Book
Gennick J (2006) SQL Pocket Guide (2nd
edition). O'Reilly.
ISBN: 0-596-52688-1
Mark Dixon
Page 3
Session Aims & Objectives
• Aims
– To introduce the fundamental ideas involved in
using relational databases for persistent data
storage
• Objectives,
by end of this week’s sessions, you should be able to:
– create a relational database table
– create a web page that displays data from a
single table in a database
– use SQL in your programs to create more
complex record-sets, using records and fields
Mark Dixon
Page 4
Persistent Data Storage
• So far
– programs (web-pages) lose data when closed
• Not realistic
– typically data stored to persistent storage device
(e.g. hard disk, key drive, floppy disk, CD-RW)
• Use either
– flat files
– database (relational, or object oriented)
Mark Dixon
Page 5
Example: People (analysis)
SPECIFICATION
• User Requirements
– need to have access to people's details
• Software Requirements
– Functional:
–Display list of people from a database
– Non-functional
should be viewable anywhere in the world
Mark Dixon
Page 6
Example: People (Database)
• Information organised into
– tables (e.g. person)
– fields (e.g. phone)
– records (e.g. 1 Dixon Mark 01752 232556 …)
Person
ID
1
2
3
Mark Dixon
Surname
Dixon
Smith
Jones
Field
Record
Forenames
Mark
John
Sally
Phone
01752 232556
01752 111111
01752 888888
Gender
Male
Male
Female
Page 7
Questions: Music (Database)
• How many fields?
• How many records?
3
9
Track
Mark Dixon
Track Title
Artist Name
Country
Paranoid
Black Sabbath
UK
Falling in Love
Aerosmith
US
Pink
Aerosmith
US
Love in an Elevator
Aerosmith
US
Smooth Criminal
Alien Ant Farm
US
Meaning of Life
Disturbed
US
The Game
Disturbed
US
Voices
Disturbed
US
Down with the Sickness
Disturbed
US
Page 8
DBMS
• Database Management Systems (DBMS)
provide facilities for:
– creating and changing databases
• add/remove records
• add/remove fields
• add/remove data
– For example:
•
•
•
•
•
•
Mark Dixon
Microsoft Access
dBase
Borland Paradox
MySQL
Microsoft SQL Server
Oracle
home/small business
large scale
Page 9
PhpMyAdmin
• used to create tables, fields, etc.
add port number
:8080
Mark Dixon
Page 10
Using Queries
<?php
$c = mysql_connect('localhost', 'root', '');
mysql_select_db('People');
$q = mysql_query('SELECT * FROM Person;');
mysql_close($c);
$s = '';
while ($r = mysql_fetch_array($q)){
$s = $s . $r['Surname'] . '<br />';
}
mysql_free_result($q);
?>
Connect to MySQL
Select Database
Get Data from Table
Read Record / Row
Read Field
<html>
<head><title></title></head>
<body>
<?php
echo $s;
?>
</body>
</html>
Mark Dixon
Page 11
Example: People (Open)
People.php
$c = mysql_connect('localhost', 'root', '');
mysql_select_db('People');
$q = mysql_query('SELECT * FROM Person;');
mysql_close($c);
$q
ID
1
2
3
Surname
Dixon
Smith
Jones
Forenames
Mark
John
Sally
Phone
01752 232556
01752 111111
01752 888888
gender
Male
Male
Female
$s = '';
while ($r = mysql_fetch_array($q)){
$s = $s . $r['Surname'] . '<br />';
}
mysql_free_result($q);
echo $s;
Mark Dixon
Page 12
Example: People
People.php
$c = mysql_connect('localhost', 'root', '');
mysql_select_db('People');
$q = mysql_query('SELECT * FROM Person;');
mysql_close($c);
$q
ID
1
2
3
Surname
Dixon
Smith
Jones
Forenames
Mark
John
Sally
Phone
01752 232556
01752 111111
01752 888888
gender
Male
Male
Female
$s
$s = '';
while ($r = mysql_fetch_array($q)){
$s = $s . $r['Surname'] . '<br />';
}
mysql_free_result($q);
echo $s;
Mark Dixon
Page 13
Example: People (EOF)
People.php
$c = mysql_connect('localhost', 'root', '');
mysql_select_db('People');
$q = mysql_query('SELECT * FROM Person;');
mysql_close($c);
$q
ID
1
2
3
Surname
Dixon
Smith
Jones
Forenames
Mark
John
Sally
Phone
01752 232556
01752 111111
01752 888888
gender
Male
Male
Female
$s
$s = '';
while ($r = mysql_fetch_array($q)){
$s = $s . $r['Surname'] . '<br />';
}
mysql_free_result($q);
echo $s;
Mark Dixon
Page 14
Example: People
People.php
$c = mysql_connect('localhost', 'root', '');
mysql_select_db('People');
$q = mysql_query('SELECT * FROM Person;');
mysql_close($c);
$s = '';
while ($r = mysql_fetch_array($q)){
$s = $s . $r['Surname'] . '<br />';
}
mysql_free_result($q);
$q
ID
1
2
3
Surname
Dixon
Smith
Jones
Forenames
Mark
John
Sally
Phone
01752 232556
01752 111111
01752 888888
gender
Male
Male
Female
$s
Dixon<br />
echo $s;
Mark Dixon
Page 15
Example: People (Loop)
People.php
$c = mysql_connect('localhost', 'root', '');
mysql_select_db('People');
$q = mysql_query('SELECT * FROM Person;');
mysql_close($c);
$s = '';
while ($r = mysql_fetch_array($q)){
$s = $s . $r['Surname'] . '<br />';
}
mysql_free_result($q);
$q
ID
1
2
3
Surname
Dixon
Smith
Jones
Forenames
Mark
John
Sally
Phone
01752 232556
01752 111111
01752 888888
gender
Male
Male
Female
$s
Dixon<br />
echo $s;
Mark Dixon
Page 16
Example: People (EOF)
People.php
$c = mysql_connect('localhost', 'root', '');
mysql_select_db('People');
$q = mysql_query('SELECT * FROM Person;');
mysql_close($c);
$s = '';
while ($r = mysql_fetch_array($q)){
$s = $s . $r['Surname'] . '<br />';
}
mysql_free_result($q);
$q
ID
1
2
3
Surname
Dixon
Smith
Jones
Forenames
Mark
John
Sally
Phone
01752 232556
01752 111111
01752 888888
gender
Male
Male
Female
$s
Dixon<br />
echo $s;
Mark Dixon
Page 17
Example: People
People.php
$c = mysql_connect('localhost', 'root', '');
mysql_select_db('People');
$q = mysql_query('SELECT * FROM Person;');
mysql_close($c);
$s = '';
while ($r = mysql_fetch_array($q)){
$s = $s . $r['Surname'] . '<br />';
}
mysql_free_result($q);
$q
ID
1
2
3
Surname
Dixon
Smith
Jones
Forenames
Mark
John
Sally
Phone
01752 232556
01752 111111
01752 888888
gender
Male
Male
Female
$s
Dixon<br />
/>Smith<br />
echo $s;
Mark Dixon
Page 18
Example: People (Loop)
People.php
$c = mysql_connect('localhost', 'root', '');
mysql_select_db('People');
$q = mysql_query('SELECT * FROM Person;');
mysql_close($c);
$s = '';
while ($r = mysql_fetch_array($q)){
$s = $s . $r['Surname'] . '<br />';
}
mysql_free_result($q);
$q
ID
1
2
3
Surname
Dixon
Smith
Jones
Forenames
Mark
John
Sally
Phone
01752 232556
01752 111111
01752 888888
gender
Male
Male
Female
$s
Dixon<br />Smith<br />
echo $s;
Mark Dixon
Page 19
Example: People (EOF)
People.php
$c = mysql_connect('localhost', 'root', '');
mysql_select_db('People');
$q = mysql_query('SELECT * FROM Person;');
mysql_close($c);
$s = '';
while ($r = mysql_fetch_array($q)){
$s = $s . $r['Surname'] . '<br />';
}
mysql_free_result($q);
$q
ID
1
2
3
Surname
Dixon
Smith
Jones
Forenames
Mark
John
Sally
Phone
01752 232556
01752 111111
01752 888888
gender
Male
Male
Female
$s
Dixon<br />Smith<br />
echo $s;
Mark Dixon
Page 20
Example: People
People.php
$c = mysql_connect('localhost', 'root', '');
mysql_select_db('People');
$q = mysql_query('SELECT * FROM Person;');
mysql_close($c);
$s = '';
while ($r = mysql_fetch_array($q)){
$s = $s . $r['Surname'] . '<br />';
}
mysql_free_result($q);
$q
ID
1
2
3
Surname
Dixon
Smith
Jones
Forenames
Mark
John
Sally
Phone
01752 232556
01752 111111
01752 888888
gender
Male
Male
Female
$s
Dixon<br />Smith<br />
/>Jones<br />
echo $s;
Mark Dixon
Page 21
Example: People (Loop)
People.php
$c = mysql_connect('localhost', 'root', '');
mysql_select_db('People');
$q = mysql_query('SELECT * FROM Person;');
mysql_close($c);
$s = '';
while ($r = mysql_fetch_array($q)){
$s = $s . $r['Surname'] . '<br />';
}
mysql_free_result($q);
$q
ID
1
2
3
Surname
Dixon
Smith
Jones
Forenames
Mark
John
Sally
Phone
01752 232556
01752 111111
01752 888888
gender
Male
Male
Female
$s
Dixon<br />Smith<br />Jones<br />
echo $s;
Mark Dixon
Page 22
Example: People (EOF)
People.php
$c = mysql_connect('localhost', 'root', '');
mysql_select_db('People');
$q = mysql_query('SELECT * FROM Person;');
mysql_close($c);
$s = '';
while ($r = mysql_fetch_array($q)){
$s = $s . $r['Surname'] . '<br />';
}
mysql_free_result($q);
rs
ID
1
2
3
Surname
Dixon
Smith
Jones
Forenames
Mark
John
Sally
Phone
01752 232556
01752 111111
01752 888888
gender
Male
Male
Female
$s
Dixon<br />Smith<br />Jones<br />
echo $s;
Mark Dixon
Page 23
Example: People
People.php
$c = mysql_connect('localhost', 'root', '');
mysql_select_db('People');
$q = mysql_query('SELECT * FROM Person;');
mysql_close($c);
$s = '';
while ($r = mysql_fetch_array($q)){
$s = $s . $r['Surname'] . '<br />';
}
mysql_free_result($q);
$q
$s
Dixon<br />Smith<br />Jones<br />
echo $s;
Mark Dixon
Page 24
Example: People
People.php
$c = mysql_connect('localhost', 'root', '');
mysql_select_db('People');
$q = mysql_query('SELECT * FROM Person;');
mysql_close($c);
$s = '';
while ($r = mysql_fetch_array($q)){
$s = $s . $r['Surname'] . '<br />';
}
mysql_free_result($q);
$q
$s
Dixon<br />Smith<br />Jones<br />
echo $s;
Mark Dixon
Page 25
Example: Countries
Countries.php
$c = mysql_connect('localhost', 'root', '');
mysql_select_db('Countries');
$q = mysql_query('SELECT * FROM Country;');
mysql_close($c);
html by hand
put br tags between data
<br />
$s = '';
while ($r = mysql_fetch_array($q)){
$s = $s . $r['Name'];
}
mysql_free_result($q);
Need data on separate lines
Mark Dixon
Page 26
Example: Countries (error)
Countries.php
$c = mysql_connect('localhost', 'root', '');
mysql_select_db('Countries');
$q = mysql_query('SELECT * FROM Country;');
mysql_close($c);
Try putting br tag here
$s = <br />;
while ($r = mysql_fetch_array($q)){
$s = $s . $r['Name'];
}
mysql_free_result($q);
php does not understand html
Mark Dixon
Page 27
Example: Countries
Countries.php
$c = mysql_connect('localhost', 'root', '');
mysql_select_db('Countries');
$q = mysql_query('SELECT * FROM Country;');
mysql_close($c);
$s = "<br />";
while ($r = mysql_fetch_array($q)){
$s = $s . $r['Name'];
}
mysql_free_result($q);
• Need double
quotes around
tag
• (php sees html as
literal string)
runs, but br in wrong place
Mark Dixon
Page 28
Example: Countries
Countries.php
$c = mysql_connect('localhost', 'root', '');
mysql_select_db('Countries');
$q = mysql_query('SELECT * FROM Country;');
mysql_close($c);
Move br tag inside loop.
Which bit of code pulls data
from database?
$s = "<br />";
while ($r = mysql_fetch_array($q)){
$s = $s . $r['Name'];
}
mysql_free_result($q);
Mark Dixon
Page 29
Example: Countries
Countries.aspx
$c = mysql_connect('localhost', 'root', '');
mysql_select_db('Countries');
$q = mysql_query('SELECT * FROM Country;');
mysql_close($c);
Move br tag inside loop.
after field data
$s = "";
while ($r = mysql_fetch_array($q)){
$s = $s . $r['Name'] . "<br />";
}
mysql_free_result($q);
View Source
Mark Dixon
Page 30
Embedding html in php
• html must be string (inside double quotes)
• follows normal pattern for expressions:
data data
data
data
$s = $s . "<b>" . $r['Name'] . "</b>";
operator
Mark Dixon
operator
operator
Page 31
Embedding html in php (errors)
$s = $s . "<i>" $r['Gender'] . "</i>";
missing operator
$s = $s . $r['Height'] . </i>";
missing double quote
$s = $s . <ul> . $r['Height'];
html tag must be inside double quotes
$s = $s . "<ul>" . $r['<b>Height'];
looks for field in database called <b>Height
Mark Dixon
Page 32
Questions: HTML in php
• Are these correct (assume variables and
fields exist)?
$g = $g . $r['Surname<br />']; 
$h = $h . "<ol>" $r['Width']; 
$a = "<p>" . $a . "</p>"; 
$html = $html . "<img src=face.gif />"; 
$h = <table> . $h . "</table>"; 
Mark Dixon
Page 33
Example: People v2
• Display Surname of Male people:
<?php
$c = mysql_connect('localhost', 'root', '');
mysql_select_db('People');
$q = mysql_query('SELECT * FROM Person;');
mysql_close($c);
$s = '';
while ($r = mysql_fetch_array($q)){
if($r['Gender'] == 1){
$s = $s . $r['Surname'] . '<br />';
}
}
mysql_free_result($q);
?>
Mark Dixon
Page 34
Example: People v3
• Display Surname of Male people:
<?php
$c = mysql_connect('localhost', 'root', '');
mysql_select_db('People');
$q = mysql_query('SELECT * FROM Person WHERE Gender=1;');
mysql_close($c);
$s = '';
while ($r = mysql_fetch_array($q)){
$s = $s . $r['Surname'] . '<br />';
}
mysql_free_result($q);
?>
SQL statement
Mark Dixon
Page 35
SQL: Queries
• main purpose of databases:
– get information back out: searching
• Structured Query Language
– dedicated to interacting with databases
• 3rd Generation Language (such as VB, C++)
– code describes how to do task
• 4th Generation Language (such as SQL)
– code describes what to do (not how to do it)
Mark Dixon
Page 36
SQL: SELECT statement
• SELECT statement
– used to get data
– can be embedded in php, via mysql_query:
$q = mysql_query('SELECT * FROM Person');
all fields
Mark Dixon
Page 37
SQL: WHERE & ORDER BY
• WHERE clause
– used to restrict data
SELECT * FROM People WHERE age>=18;
• ORDER BY clause
– used to change order of data
SELECT * FROM People ORDER BY Surname;
Mark Dixon
Page 38
SQL: strings (text data)
• Possible confusion:
SELECT * FROM Person WHERE Surname = Smith
this will look for field called Smith - gives error
•
need single (SQL) quotes to signify literal text
SELECT * FROM Person WHERE Surname = 'Smith'
Mark Dixon
Page 39
Questions: SQL
• Create an SQL
statement to extract
Track Title of
records by
Aerosmith
Track
TrackTitle
ArtistName
Country
Paranoid
Black Sabbath
UK
Falling in Love
Aerosmith
US
Pink
Aerosmith
US
Love in an Elevator
Aerosmith
US
Smooth Criminal
Alien Ant Farm
US
Meaning of Life
Disturbed
US
The Game
Disturbed
US
Voices
Disturbed
US
Down with the Sickness
Disturbed
US
SELECT TrackTitle FROM Track
WHERE ArtistName = 'Aerosmith';
Mark Dixon
Page 40
Questions: SQL
• Create an SQL
statement to extract
all fields of songs by
Disturbed, ordered
by track name
Track
TrackTitle
ArtistName
Country
Paranoid
Black Sabbath
UK
Falling in Love
Aerosmith
US
Pink
Aerosmith
US
Love in an Elevator
Aerosmith
US
Smooth Criminal
Alien Ant Farm
US
Meaning of Life
Disturbed
US
The Game
Disturbed
US
Voices
Disturbed
US
Down with the Sickness
Disturbed
US
SELECT * FROM Track WHERE ArtistName = 'Disturbed'
ORDER BY TrackTitle;
Mark Dixon
Page 41
Example: People v4
• User controls what is displayed:
Mark Dixon
Page 42
SQL: DISTINCT records
ArtistName
SELECT ArtistName
FROM Track;
Black Sabbath
Aerosmith
Aerosmith
Aerosmith
Alien Ant Farm
Disturbed
Disturbed
Disturbed
Disturbed
SELECT DISTINCT ArtistName
FROM Track;
ArtistName
Black Sabbath
Aerosmith
Alien Ant Farm
Disturbed
Mark Dixon
Page 43
Tutorial Exercise: People
•
•
•
•
•
•
•
•
•
Task 1: Create your own People database:
– Start WAMP Server
– Open PhpMyAdmin
– Create a new database
– Create a new table
– Create fields
– Enter data
Task 2: Get the People v1 example (from the lecture) working.
Task 3: Modify your page so that it displays phone number as well as the person's name.
Task 4: Modify your page so that it displays the data in an html table.
Task 5: Modify your page so that records for males are displayed in blue, and records for
females are displayed in red.
Task 6: Modify your page as per version 4. You will need to:
– Add a form to the page, and three submit buttons
– In your code, detect when a button has been pressed (have a look at previous
weeks)
Task 7: Modify your page so that the user can type a letter, and only names starting with
that letter are displayed.
Task 8: Modify your page so that the user can type a series of numerical digits and only
phone numbers containing those digits are displayed.
Task 9: Modify your code so that the user can order the data by surname, or email
address (You may want to use a Query String)
Mark Dixon
Page 44