SQL +php+w3school
SQL +php+w3school
What is SQL?
Although SQL is an ANSI (American National Standards Institute) standard, there are many different
versions of the SQL language.
However, to be compliant with the ANSI standard, they all support at least the major commands (such as
SELECT, UPDATE, DELETE, INSERT, WHERE) in a similar manner.
Note: Most of the SQL database programs also have their own proprietary extensions in addition to the SQL
standard!
To build a web site that shows some data from a database, you will need the following:
RDBMS
A table is a collections of related data entries and it consists of columns and rows.
SQL Data Types
1
Data types and ranges for Microsoft Access, MySQL and SQL Server.
Text Use for text or combinations of text and numbers. 255 characters
maximum
Memo Memo is used for larger amounts of text. Stores up to 65,536 characters.
Note: You cannot sort a memo field. However, they are searchable
Currency Use for currency. Holds up to 15 digits of whole dollars, plus 4 decimal 8 bytes
places. Tip: You can choose which country's currency to use
AutoNumber AutoNumber fields automatically give each record its own number, usually 4 bytes
starting at 1
Yes/No A logical field can be displayed as Yes/No, True/False, or On/Off. In code, 1 bit
use the constants True and False (equivalent to -1 and 0). Note: Null
values are not allowed in Yes/No fields
Ole Object Can store pictures, audio, video, or other BLOBs (Binary Large OBjects) up to 1GB
Hyperlink Contain links to other files, including web pages
Lookup Wizard Let you type a list of options, which can then be chosen from a drop-down 4 bytes
list
In MySQL there are three main types : text, number, and Date/Time types.
Text types:
CHAR(size) Holds a fixed length string (can contain letters, numbers, and special characters). The
fixed size is specified in parenthesis. Can store up to 255 characters
VARCHAR(size) Holds a variable length string (can contain letters, numbers, and special characters).
The maximum size is specified in parenthesis. Can store up to 255 characters. Note:
If you put a greater value than 255 it will be converted to a TEXT type
BLOB For BLOBs (Binary Large OBjects). Holds up to 65,535 bytes of data
MEDIUMBLOB For BLOBs (Binary Large OBjects). Holds up to 16,777,215 bytes of data
LONGBLOB For BLOBs (Binary Large OBjects). Holds up to 4,294,967,295 bytes of data
ENUM(x,y,z,etc.) Let you enter a list of possible values. You can list up to 65535 values in an ENUM list.
If a value is inserted that is not in the list, a blank value will be inserted.
Note: The values are sorted in the order you enter them.
Number types:
Data type Description
TINYINT(size) -128 to 127 normal. 0 to 255 UNSIGNED*. The maximum number of digits may be
specified in parenthesis
SMALLINT(size) -32768 to 32767 normal. 0 to 65535 UNSIGNED*. The maximum number of digits
may be specified in parenthesis
FLOAT(size,d) A small number with a floating decimal point. The maximum number of digits may be
specified in the size parameter. The maximum number of digits to the right of the
decimal point is specified in the d parameter
DOUBLE(size,d) A large number with a floating decimal point. The maximum number of digits may be
specified in the size parameter. The maximum number of digits to the right of the
decimal point is specified in the d parameter
DECIMAL(size,d) A DOUBLE stored as a string , allowing for a fixed decimal point. The maximum
number of digits may be specified in the size parameter. The maximum number of
digits to the right of the decimal point is specified in the d parameter
*The integer types have an extra option called UNSIGNED. Normally, the integer goes from an negative to
positive value. Adding the UNSIGNED attribute will move that range up so it starts at zero instead of a
negative number.
Date types:
Note: Values allowed in four-digit format: 1901 to 2155. Values allowed in two-digit
format: 70 to 69, representing years from 1970 to 2069
*Even if DATETIME and TIMESTAMP return the same format, they work very differently. In an INSERT or
UPDATE query, the TIMESTAMP automatically set itself to the current date and time. TIMESTAMP also
accepts various formats, like YYYYMMDDHHMMSS, YYMMDDHHMMSS, YYYYMMDD, or YYMMDD.
Character strings:
Unicode strings:
Binary types:
Number types:
The p parameter indicates the maximum total number of digits that can be
stored (both to the left and to the right of the decimal point). p must be a
value from 1 to 38. Default is 18.
The p parameter indicates the maximum total number of digits that can be
stored (both to the left and to the right of the decimal point). p must be a
value from 1 to 38. Default is 18.
float(n) Floating precision number data from -1.79E + 308 to 1.79E + 308. 4 or 8
bytes
The n parameter indicates whether the field should hold 4 or 8 bytes.
float(24) holds a 4-byte field and float(53) holds an 8-byte field. Default
value of n is 53.
real Floating precision number data from -3.40E + 38 to 3.40E + 38 4 bytes
Date types:
datetime From January 1, 1753 to December 31, 9999 with an accuracy of 3.33 8 bytes
milliseconds
datetime2 From January 1, 0001 and December 31, 9999 with an accuracy of 100 6-8 bytes
nanoseconds
smalldatetime From January 1, 1900 to June 6, 2079 with an accuracy of 1 minute 4 bytes
date Store a date only. From January 1, 0001 to December 31, 9999 3 bytes
datetimeoffset The same as datetime2 with the addition of a time zone offset 8-10
bytes
timestamp Stores a unique number that gets updated every time a row gets created or
modified. The timestamp value is based upon an internal clock and does
not correspond to real time. Each table may have only one timestamp
variable
sql_variant Stores up to 8,000 bytes of data of various data types, except text, ntext, and
timestamp
Database Tables
A database most often contains one or more tables. Each table is identified by a name (e.g. "Customers" or
"Orders"). Tables contain records (rows) with data.
Below is an example of a table called "Persons":
The table above contains three records (one for each person) and five columns (P_Id, LastName, FirstName,
Address, and City).
SQL Statements
Most of the actions you need to perform on a database are done with SQL statements.
The following SQL statement will select all the records in the "Persons" table:
In this tutorial we will teach you all about the different SQL statements.
Some database systems require a semicolon at the end of each SQL statement.
Semicolon is the standard way to separate each SQL statement in database systems that allow more than
one SQL statement to be executed in the same call to the server.
We are using MS Access and SQL Server 2000 and we do not have to put a semicolon after each SQL
statement, but some database programs force you to use it.
SQL can be divided into two parts: The Data Manipulation Language (DML) and the Data Definition Language
(DDL).
The query and update commands form the DML part of SQL:
• SELECT - extracts data from a database
• UPDATE - updates data in a database
• DELETE - deletes data from a database
• INSERT INTO - inserts new data into a database
The DDL part of SQL permits database tables to be created or deleted. It also define indexes (keys), specify
links between tables, and impose constraints between tables. The most important DDL statements in SQL
are:
SQL SELECT Syntax
SELECT column_name(s)
FROM table_name
and
Now we want to select the content of the columns named "LastName" and "FirstName" from the table
above.
We use the following SELECT statement:
LastName FirstName
Hansen Ola
Svendson Tove
Pettersen Kari
SELECT * Example
Now we want to select all the columns from the "Persons" table.
Navigation in a Result-set
Most database software systems allow navigation in the result-set with programming functions, like: Move-
To-First-Record, Get-Record-Content, Move-To-Next-Record, etc.
Programming functions like these are not a part of this tutorial. To learn about accessing data with function
calls, please visit our ADO tutorial or our PHP tutorial.
The SQL SELECT DISTINCT Statement
In a table, some of the columns may contain duplicate values. This is not a problem, however, sometimes
you will want to list only the different (distinct) values in a table.
The DISTINCT keyword can be used to return only distinct (different) values.
SQL SELECT DISTINCT Syntax
SELECT DISTINCT column_name(s)
FROM table_name
Now we want to select only the distinct values from the column named "City" from the table above.
City
Sandnes
Stavanger
The WHERE clause is used to extract only those records that fulfill a specified criterion.
SQL WHERE Syntax
SELECT column_name(s)
FROM table_name
WHERE column_name operator value
Now we want to select only the persons living in the city "Sandnes" from the table above.
SQL uses single quotes around text values (most database systems will also accept double quotes).
This is correct:
SELECT * FROM Persons WHERE Year=1965
This is wrong:
SELECT * FROM Persons WHERE Year='1965'
Operator Description
= Equal
IN If you know the exact value you want to return for at least one of the columns
The AND operator displays a record if both the first condition and the second condition is true.
The OR operator displays a record if either the first condition or the second condition is true.
Now we want to select only the persons with the first name equal to "Tove" AND the last name equal to
"Svendson":
OR Operator Example
Now we want to select only the persons with the first name equal to "Tove" OR the first name equal to
"Ola":
We use the following SELECT statement:
You can also combine AND and OR (use parenthesis to form complex expressions).
Now we want to select only the persons with the last name equal to "Svendson" AND the first name equal to
"Tove" OR to "Ola":
If you want to sort the records in a descending order, you can use the DESC keyword.
SQL ORDER BY Syntax
SELECT column_name(s)
FROM table_name
ORDER BY column_name(s) ASC|DESC
ORDER BY Example
Now we want to select all the persons from the table above, however, we want to sort the persons by their
last name.
Now we want to select all the persons from the table above, however, we want to sort the persons
descending by their last name.
SQL INSERT INTO Syntax
The first form doesn't specify the column names where the data will be inserted, only their values:
The second form specifies both the column names and the values to be inserted:
The following SQL statement will add a new row, but only add data in the "P_Id", "LastName" and the
"FirstName" columns:
5 Tjessem Jakob
SQL INSERT INTO Syntax
The first form doesn't specify the column names where the data will be inserted, only their values:
The second form specifies both the column names and the values to be inserted:
The following SQL statement will add a new row, but only add data in the "P_Id", "LastName" and the
"FirstName" columns:
5 Tjessem Jakob
Note: Notice the WHERE clause in the DELETE syntax. The WHERE clause specifies which record or records
that should be deleted. If you omit the WHERE clause, all records will be deleted!
Now we want to delete the person "Tjessem, Jakob" in the "Persons" table.
It is possible to delete all rows in a table without deleting the table. This means that the table structure,
attributes, and indexes will be intact:
Note: Be very careful when deleting records. You cannot undo this statement!
SQL DELETE Syntax
DELETE FROM table_name
WHERE some_column=some_value
Note: Notice the WHERE clause in the DELETE syntax. The WHERE clause specifies which record or records
that should be deleted. If you omit the WHERE clause, all records will be deleted!
Now we want to delete the person "Tjessem, Jakob" in the "Persons" table.
It is possible to delete all rows in a table without deleting the table. This means that the table structure,
attributes, and indexes will be intact:
Note: Be very careful when deleting records. You cannot undo this statement!
SQL DELETE Syntax
DELETE FROM table_name
WHERE some_column=some_value
Note: Notice the WHERE clause in the DELETE syntax. The WHERE clause specifies which record or records
that should be deleted. If you omit the WHERE clause, all records will be deleted!
Now we want to delete the person "Tjessem, Jakob" in the "Persons" table.
It is possible to delete all rows in a table without deleting the table. This means that the table structure,
attributes, and indexes will be intact:
Note: Be very careful when deleting records. You cannot undo this statement!
SQL LIKE Syntax
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern
LIKE Operator Example
Now we want to select the persons living in a city that starts with "s" from the table above.
The "%" sign can be used to define wildcards (missing letters in the pattern) both before and after the
pattern.
Next, we want to select the persons living in a city that ends with an "s" from the "Persons" table.
It is also possible to select the persons living in a city that NOT contains the pattern "tav" from the "Persons"
table, by using the NOT keyword.
SQL Wildcards
SQL wildcards can substitute for one or more characters when searching for data in a database.
Wildcard Description
or
[!charlist]
Now we want to select the persons living in a city that starts with "sa" from the "Persons" table.
Next, we want to select the persons living in a city that contains the pattern "nes" from the "Persons" table.
Now we want to select the persons with a first name that starts with any character, followed by "la" from the
"Persons" table.
Next, we want to select the persons with a last name that starts with "S", followed by any character,
followed by "end", followed by any character, followed by "on" from the "Persons" table.
Now we want to select the persons with a last name that starts with "b" or "s" or "p" from the "Persons"
table.
We use the following SELECT statement:
Next, we want to select the persons with a last name that do not start with "b" or "s" or "p" from the
"Persons" table.
The IN Operator
SQL IN Syntax
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...)
IN Operator Example
Now we want to select the persons with a last name equal to "Hansen" or "Pettersen" from the table above.
The IN Operator
SQL IN Syntax
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...)
IN Operator Example
SQL Alias
You can give a table or a column another name by using an alias. This can be a good thing to do if you have
very long or complex table names or column names.
SQL Alias Syntax for Tables
SELECT column_name(s)
FROM table_name
AS alias_name
SQL Alias Syntax for Columns
SELECT column_name AS alias_name
FROM table_name
Alias Example
Assume we have a table called "Persons" and another table called "Product_Orders". We will give the table
aliases of "p" an "po" respectively.
Now we want to list all the orders that "Ola Hansen" is responsible for.
As you'll see from the two SELECT statements above; aliases can make queries easier to both write and to
read.
SQL JOIN
The JOIN keyword is used in an SQL statement to query data from two or more tables, based on a
relationship between certain columns in these tables.
A primary key is a column (or a combination of columns) with a unique value for each row. Each primary
key value must be unique within the table. The purpose is to bind data together, across tables, without
repeating all of the data in every table.
Note that the "P_Id" column is the primary key in the "Persons" table. This means that no two rows can
have the same P_Id. The P_Id distinguishes two persons even if they have the same name.
Note that the "O_Id" column is the primary key in the "Orders" table and that the "P_Id" column refers to
the persons in the "Persons" table without using their names.
Notice that the relationship between the two tables above is the "P_Id" column.
• JOIN: Return rows when there is at least one match in both tables
• LEFT JOIN: Return all rows from the left table, even if there are no matches in the right table
• RIGHT JOIN: Return all rows from the right table, even if there are no matches in the left table
• FULL JOIN: Return rows when there is a match in one of the tables
The INNER JOIN keyword return rows when there is at least one match in both tables.
SQL INNER JOIN Syntax
SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 15
Now we want to list all the persons with any orders.
The INNER JOIN keyword return rows when there is at least one match in both tables. If there are rows in
"Persons" that do not have matches in "Orders", those rows will NOT be listed.
The INNER JOIN keyword return rows when there is at least one match in both tables.
SQL INNER JOIN Syntax
SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 15
The INNER JOIN keyword return rows when there is at least one match in both tables. If there are rows in
"Persons" that do not have matches in "Orders", those rows will NOT be listed.
SQL INNER JOIN Syntax
SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 15
The INNER JOIN keyword return rows when there is at least one match in both tables. If there are rows in
"Persons" that do not have matches in "Orders", those rows will NOT be listed.
The INNER JOIN keyword return rows when there is at least one match in both tables.
SQL INNER JOIN Syntax
SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name
2 44678 3
3 22456 1
4 24562 1
5 34764 15
The INNER JOIN keyword return rows when there is at least one match in both tables. If there are rows in
"Persons" that do not have matches in "Orders", those rows will NOT be listed.
The UNION operator is used to combine the result-set of two or more SELECT statements.
Notice that each SELECT statement within the UNION must have the same number of columns. The columns
must also have similar data types. Also, the columns in each SELECT statement must be in the same order.
SQL UNION Syntax
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
Note: The UNION operator selects only distinct values by default. To allow duplicate values, use UNION ALL.
SQL UNION ALL Syntax
SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2
PS: The column names in the result-set of a UNION are always equal to the column names in the first
SELECT statement in the UNION.
"Employees_Norway":
E_ID E_Name
01 Hansen, Ola
02 Svendson, Tove
03 Svendson, Stephen
04 Pettersen, Kari
"Employees_USA":
E_ID E_Name
01 Turner, Sally
02 Kent, Clark
03 Svendson, Stephen
04 Scott, Stephen
Now we want to list all the different employees in Norway and USA.
E_Name
Hansen, Ola
Svendson, Tove
Svendson, Stephen
Pettersen, Kari
Turner, Sally
Kent, Clark
Scott, Stephen
Note: This command cannot be used to list all employees in Norway and USA. In the example above we
have two employees with equal names, and only one of them will be listed. The UNION command selects
only distinct values.
Result
E_Name
Hansen, Ola
Svendson, Tove
Svendson, Stephen
Pettersen, Kari
Turner, Sally
Kent, Clark
Svendson, Stephen
Scott, Stephen
The SQL SELECT INTO statement can be used to create backup copies of tables.
The SELECT INTO statement selects data from one table and inserts it into a different table.
The SELECT INTO statement is most often used to create backup copies of tables.
SQL SELECT INTO Syntax
SELECT *
INTO new_table_name [IN externaldatabase]
FROM old_tablename
Or we can select only the columns we want into the new table:
SELECT column_name(s)
INTO new_table_name [IN externaldatabase]
FROM old_tablename
Make a Backup Copy - Now we want to make an exact copy of the data in our "Persons" table.
SELECT *
INTO Persons_Backup
FROM Persons
We can also use the IN clause to copy the table into another database:
SELECT *
INTO Persons_Backup IN 'Backup.mdb'
FROM Persons
We can also copy only a few fields into the new table:
SELECT LastName,FirstName
INTO Persons_Backup
FROM Persons
The following SQL statement creates a "Persons_Backup" table with only the persons who lives in the city
"Sandnes":
SELECT LastName,Firstname
INTO Persons_Backup
FROM Persons
WHERE City='Sandnes'
The following example creates a "Persons_Order_Backup" table contains data from the two tables "Persons"
and "Orders":
SELECT Persons.LastName,Orders.OrderNo
INTO Persons_Order_Backup
FROM Persons
INNER JOIN Orders
ON Persons.P_Id=Orders.P_Id
SQL CREATE DATABASE Syntax
CREATE DATABASE database_name
SQL CREATE TABLE Syntax
CREATE TABLE table_name
(
column_name1 data_type,
column_name2 data_type,
column_name3 data_type,
....
)
The data type specifies what type of data the column can hold. For a complete reference of all the data
types available in MS Access, MySQL, and SQL Server, go to our complete Data Types reference.
Now we want to create a table called "Persons" that contains five columns: P_Id, LastName, FirstName,
Address, and City.
The P_Id column is of type int and will hold a number. The LastName, FirstName, Address, and City columns
are of type varchar with a maximum length of 255 characters.
SQL Constraints
Constraints are used to limit the type of data that can go into a table.
Constraints can be specified when a table is created (with the CREATE TABLE statement) or after the table is
created (with the ALTER TABLE statement).
• NOT NULL
• UNIQUE
• PRIMARY KEY
• FOREIGN KEY
• CHECK
• DEFAULT
The NOT NULL constraint enforces a column to NOT accept NULL values.
The NOT NULL constraint enforces a field to always contain a value. This means that you cannot insert a
new record, or update a record without adding a value to this field.
The following SQL enforces the "P_Id" column and the "LastName" column to not accept NULL values:
SQL UNIQUE Constraint
6
Note that you can have have many UNIQUE constraints per table, but only one PRIMARY KEY constraint per
table.
The following SQL creates a UNIQUE constraint on the "P_Id" column when the "Persons" table is created:
MySQL:
To allow naming of a UNIQUE constraint, and for defining a UNIQUE constraint on multiple columns, use
the following SQL syntax:
To create a UNIQUE constraint on the "P_Id" column when the table is already created, use the following
SQL:
To allow naming of a UNIQUE constraint, and for defining a UNIQUE constraint on multiple columns, use
the following SQL syntax:
MySQL:
The PRIMARY KEY constraint uniquely identifies each record in a database table.
Each table should have a primary key, and each table can have only one primary key.
SQL PRIMARY KEY Constraint on CREATE TABLE
The following SQL creates a PRIMARY KEY on the "P_Id" column when the "Persons" table is created:
MySQL:
To allow naming of a PRIMARY KEY constraint, and for defining a PRIMARY KEY constraint on multiple
columns, use the following SQL syntax:
To create a PRIMARY KEY constraint on the "P_Id" column when the table is already created, use the
following SQL:
To allow naming of a PRIMARY KEY constraint, and for defining a PRIMARY KEY constraint on multiple
columns, use the following SQL syntax:
Note: If you use the ALTER TABLE statement to add a primary key, the primary key column(s) must already
have been declared to not contain NULL values (when the table was first created).
MySQL:
SQL FOREIGN KEY Constraint
8
Let's illustrate the foreign key with an example. Look at the following two tables:
1 77895 3
2 44678 3
3 22456 2
4 24562 1
Note that the "P_Id" column in the "Orders" table points to the "P_Id" column in the "Persons" table.
The "P_Id" column in the "Persons" table is the PRIMARY KEY in the "Persons" table.
The "P_Id" column in the "Orders" table is a FOREIGN KEY in the "Orders" table.
The FOREIGN KEY constraint is used to prevent actions that would destroy link between tables.
The FOREIGN KEY constraint also prevents that invalid data is inserted into the foreign key column,
because it has to be one of the values contained in the table it points to.
The following SQL creates a FOREIGN KEY on the "P_Id" column when the "Orders" table is created:
MySQL:
To allow naming of a FOREIGN KEY constraint, and for defining a FOREIGN KEY constraint on multiple
columns, use the following SQL syntax:
To create a FOREIGN KEY constraint on the "P_Id" column when the "Orders" table is already created, use
the following SQL:
To allow naming of a FOREIGN KEY constraint, and for defining a FOREIGN KEY constraint on multiple
columns, use the following SQL syntax:
The CHECK constraint is used to limit the value range that can be placed in a column.
If you define a CHECK constraint on a single column it allows only certain values for this column.
If you define a CHECK constraint on a table it can limit the values in certain columns based on values in
other columns in the row.
The following SQL creates a CHECK constraint on the "P_Id" column when the "Persons" table is created.
The CHECK constraint specifies that the column "P_Id" must only include integers greater than 0.
My SQL:
To allow naming of a CHECK constraint, and for defining a CHECK constraint on multiple columns, use the
following SQL syntax:
MySQL / SQL Server / Oracle / MS Access:
To create a CHECK constraint on the "P_Id" column when the table is already created, use the following
SQL:
To allow naming of a CHECK constraint, and for defining a CHECK constraint on multiple columns, use the
following SQL syntax:
The default value will be added to all new records, if no other value is specified.
The following SQL creates a DEFAULT constraint on the "City" column when the "Persons" table is created:
My SQL / SQL Server / Oracle / MS Access:
The DEFAULT constraint can also be used to insert system values, by using functions like GETDATE():
To create a DEFAULT constraint on the "City" column when the table is already created, use the following
SQL:
MySQL:
MySQL:
Indexes allow the database application to find data fast; without reading the whole table.
Indexes
An index can be created in a table to find data more quickly and efficiently.
The users cannot see the indexes, they are just used to speed up searches/queries.
Note: Updating a table with indexes takes more time than updating a table without (because the indexes
also need an update). So you should only create indexes on columns (and tables) that will be frequently
searched against.
SQL CREATE INDEX Syntax
SQL CREATE UNIQUE INDEX Syntax
Note: The syntax for creating indexes varies amongst different databases. Therefore: Check the syntax for
creating indexes in your database.
The SQL statement below creates an index named "PIndex" on the "LastName" column in the "Persons"
table:
If you want to create an index on a combination of columns, you can list the column names within the
parentheses, separated by commas:
Indexes, tables, and databases can easily be deleted/removed with the DROP statement.
DROP INDEX Syntax for MS Access:
DROP INDEX index_name ON table_name
DROP INDEX Syntax for MS SQL Server:
DROP INDEX table_name.index_name
DROP INDEX Syntax for DB2/Oracle:
DROP INDEX index_name
DROP INDEX Syntax for MySQL:
ALTER TABLE table_name DROP INDEX index_name
What if we only want to delete the data inside the table, and not the table itself?
The ALTER TABLE Statement
The ALTER TABLE statement is used to add, delete, or modify columns in an existing table.
SQL ALTER TABLE Syntax
To delete a column in a table, use the following syntax (notice that some database systems don't allow
deleting a column):
To change the data type of a column in a table, use the following syntax:
Notice that the new column, "DateOfBirth", is of type date and is going to hold a date. The data type
specifies what type of data the column can hold. For a complete reference of all the data types available in
MS Access, MySQL, and SQL Server, go to our complete Data Types reference.
Now we want to change the data type of the column named "DateOfBirth" in the "Persons" table.
Notice that the "DateOfBirth" column is now of type year and is going to hold a year in a two-digit or four-
digit format.
Next, we want to delete the column named "DateOfBirth" in the "Persons" table.
SQL AUTO INCREMENT Field
1
Auto-increment allows a unique number to be generated when a new record is inserted into a
table.
Very often we would like the value of the primary key field to be created automatically every time a new
record is inserted.
The following SQL statement defines the "P_Id" column to be an auto-increment primary key field in the
"Persons" table:
By default, the starting value for AUTO_INCREMENT is 1, and it will increment by 1 for each new record.
To let the AUTO_INCREMENT sequence start with another value, use the following SQL statement:
To insert a new record into the "Persons" table, we will not have to specify a value for the "P_Id" column (a
unique value will be added automatically):
The SQL statement above would insert a new record into the "Persons" table. The "P_Id" column would be
assigned a unique value. The "FirstName" column would be set to "Lars" and the "LastName" column would
be set to "Monsen".
Syntax for SQL Server
The following SQL statement defines the "P_Id" column to be an auto-increment primary key field in the
"Persons" table:
The MS SQL Server uses the IDENTITY keyword to perform an auto-increment feature.
By default, the starting value for IDENTITY is 1, and it will increment by 1 for each new record.
To specify that the "P_Id" column should start at value 10 and increment by 5, change the identity to
IDENTITY(10,5).
To insert a new record into the "Persons" table, we will not have to specify a value for the "P_Id" column (a
unique value will be added automatically):
The SQL statement above would insert a new record into the "Persons" table. The "P_Id" column would be
assigned a unique value. The "FirstName" column would be set to "Lars" and the "LastName" column would
be set to "Monsen".
The following SQL statement defines the "P_Id" column to be an auto-increment primary key field in the
"Persons" table:
By default, the starting value for AUTOINCREMENT is 1, and it will increment by 1 for each new record.
To specify that the "P_Id" column should start at value 10 and increment by 5, change the autoincrement to
AUTOINCREMENT(10,5).
To insert a new record into the "Persons" table, we will not have to specify a value for the "P_Id" column (a
unique value will be added automatically):
The SQL statement above would insert a new record into the "Persons" table. The "P_Id" column would be
assigned a unique value. The "FirstName" column would be set to "Lars" and the "LastName" column would
be set to "Monsen".
You will have to create an auto-increment field with the sequence object (this object generates a number
sequence).
The code above creates a sequence object called seq_person, that starts with 1 and will increment by 1. It
will also cache up to 10 values for performance. The cache option specifies how many sequence values will
be stored in memory for faster access.
To insert a new record into the "Persons" table, we will have to use the nextval function (this function
retrieves the next value from seq_person sequence):
The SQL statement above would insert a new record into the "Persons" table. The "P_Id" column would be
assigned the next number from the seq_person sequence. The "FirstName" column would be set to "Lars"
and the "LastName" column would be set to "Monsen".
SQL Views
1
A view is a virtual table.
A view contains rows and columns, just like a real table. The fields in a view are fields from one or more real
tables in the database.
You can add SQL functions, WHERE, and JOIN statements to a view and present the data as if the data were
coming from one single table.
SQL CREATE VIEW Syntax
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
Note: A view always shows up-to-date data! The database engine recreates the data, using the view's SQL
statement, every time a user queries a view.
If you have the Northwind database you can see that it has several views installed by default.
The view "Current Product List" lists all active products (products that are not discontinued) from the
"Products" table. The view is created with the following SQL:
Another view in the Northwind sample database selects every product in the "Products" table with a unit
price higher than the average unit price:
Another view in the Northwind database calculates the total sale for each category in 1997. Note that this
view selects its data from another view called "Product Sales for 1997":
We can also add a condition to the query. Now we want to see the total sale only for the category
"Beverages":
SQL CREATE OR REPLACE VIEW Syntax
CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
Now we want to add the "Category" column to the "Current Product List" view. We will update the view with
the following SQL:
SQL Dates
The most difficult part when working with dates is to be sure that the format of the date you are trying to
insert, matches the format of the date column in the database.
As long as your data contains only the date portion, your queries will work as expected. However, if a time
portion is involved, it gets complicated.
Before talking about the complications of querying for dates, we will look at the most important built-in
functions for working with dates.
The following table lists the most important built-in date functions in MySQL:
Function Description
The following table lists the most important built-in date functions in SQL Server:
Function Description
MySQL comes with the following data types for storing a date or a date/time value in the database:
SQL Server comes with the following data types for storing a date or a date/time value in the database:
Note: The date types are chosen for a column when you create a new table in your database!
For an overview of all data types available, go to our complete Data Types reference.
You can compare two dates easily if there is no time component involved!
1 Geitost 2008-11-11
Now we want to select the records with an OrderDate of "2008-11-11" from the table above.
1 Geitost 2008-11-11
Now, assume that the "Orders" table looks like this (notice the time component in the "OrderDate" column):
we will get no result! This is because the query is looking only for dates with no time portion.
Tip: If you want to keep your queries simple and easy to maintain, do not allow time components in your
dates!
SQL NULL Values
3
NULL values represent missing unknown data.
This chapter will explain the IS NULL and IS NOT NULL operators.
If a column in a table is optional, we can insert a new record or update an existing record without adding a
value to this column. This means that the field will be saved with a NULL value.
Note: It is not possible to compare NULL and 0; they are not equivalent.
Suppose that the "Address" column in the "Persons" table is optional. This means that if we insert a record
with no value for the "Address" column, the "Address" column will be saved with a NULL value.
It is not possible to test for NULL values with comparison operators, such as =, <, or <>.
We will have to use the IS NULL and IS NOT NULL operators instead.
SQL IS NULL
How do we select only the records with NULL values in the "Address" column?
Hansen Ola
Pettersen Kari
How do we select only the records with no NULL values in the "Address" column?
In the next chapter we will look at the ISNULL(), NVL(), IFNULL() and COALESCE() functions.
SQL NULL Functions
3
2 Mascarpone 32.56 23
3 Gorgonzola 15.67 9 20
Suppose that the "UnitsOnOrder" column is optional, and may contain NULL values.
SELECT ProductName,UnitPrice*(UnitsInStock+UnitsOnOrder)
FROM Products
In the example above, if any of the "UnitsOnOrder" values are NULL, the result is NULL.
Microsoft's ISNULL() function is used to specify how we want to treat NULL values.
The NVL(), IFNULL(), and COALESCE() functions can also be used to achieve the same result.
Below, if "UnitsOnOrder" is NULL it will not harm the calculation, because ISNULL() returns a zero if the
value is NULL:
SELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))
FROM Products
Oracle
Oracle does not have an ISNULL() function. However, we can use the NVL() function to achieve the same
result:
SELECT ProductName,UnitPrice*(UnitsInStock+NVL(UnitsOnOrder,0))
FROM Products
MySQL
MySQL does have an ISNULL() function. However, it works a little bit different from Microsoft's ISNULL()
function.
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
SQL Data Types
3
Data types and ranges for Microsoft Access, MySQL and SQL Server.
Text Use for text or combinations of text and numbers. 255 characters
maximum
Memo Memo is used for larger amounts of text. Stores up to 65,536 characters.
Note: You cannot sort a memo field. However, they are searchable
Currency Use for currency. Holds up to 15 digits of whole dollars, plus 4 decimal 8 bytes
places. Tip: You can choose which country's currency to use
AutoNumber AutoNumber fields automatically give each record its own number, usually 4 bytes
starting at 1
Yes/No A logical field can be displayed as Yes/No, True/False, or On/Off. In code, 1 bit
use the constants True and False (equivalent to -1 and 0). Note: Null
values are not allowed in Yes/No fields
Ole Object Can store pictures, audio, video, or other BLOBs (Binary Large OBjects) up to 1GB
In MySQL there are three main types : text, number, and Date/Time types.
Text types:
CHAR(size) Holds a fixed length string (can contain letters, numbers, and special characters). The
fixed size is specified in parenthesis. Can store up to 255 characters
VARCHAR(size) Holds a variable length string (can contain letters, numbers, and special characters).
The maximum size is specified in parenthesis. Can store up to 255 characters. Note:
If you put a greater value than 255 it will be converted to a TEXT type
BLOB For BLOBs (Binary Large OBjects). Holds up to 65,535 bytes of data
MEDIUMBLOB For BLOBs (Binary Large OBjects). Holds up to 16,777,215 bytes of data
LONGBLOB For BLOBs (Binary Large OBjects). Holds up to 4,294,967,295 bytes of data
ENUM(x,y,z,etc.) Let you enter a list of possible values. You can list up to 65535 values in an ENUM list.
If a value is inserted that is not in the list, a blank value will be inserted.
Note: The values are sorted in the order you enter them.
Number types:
SMALLINT(size) -32768 to 32767 normal. 0 to 65535 UNSIGNED*. The maximum number of digits
may be specified in parenthesis
FLOAT(size,d) A small number with a floating decimal point. The maximum number of digits may be
specified in the size parameter. The maximum number of digits to the right of the
decimal point is specified in the d parameter
DOUBLE(size,d) A large number with a floating decimal point. The maximum number of digits may be
specified in the size parameter. The maximum number of digits to the right of the
decimal point is specified in the d parameter
DECIMAL(size,d) A DOUBLE stored as a string , allowing for a fixed decimal point. The maximum
number of digits may be specified in the size parameter. The maximum number of
digits to the right of the decimal point is specified in the d parameter
*The integer types have an extra option called UNSIGNED. Normally, the integer goes from an negative to
positive value. Adding the UNSIGNED attribute will move that range up so it starts at zero instead of a
negative number.
Date types:
Note: Values allowed in four-digit format: 1901 to 2155. Values allowed in two-digit
format: 70 to 69, representing years from 1970 to 2069
*Even if DATETIME and TIMESTAMP return the same format, they work very differently. In an INSERT or
UPDATE query, the TIMESTAMP automatically set itself to the current date and time. TIMESTAMP also
accepts various formats, like YYYYMMDDHHMMSS, YYMMDDHHMMSS, YYYYMMDD, or YYMMDD.
Character strings:
Unicode strings:
Binary types:
Number types:
The p parameter indicates the maximum total number of digits that can be
stored (both to the left and to the right of the decimal point). p must be a
value from 1 to 38. Default is 18.
The p parameter indicates the maximum total number of digits that can be
stored (both to the left and to the right of the decimal point). p must be a
value from 1 to 38. Default is 18.
float(n) Floating precision number data from -1.79E + 308 to 1.79E + 308. 4 or 8
bytes
The n parameter indicates whether the field should hold 4 or 8 bytes.
float(24) holds a 4-byte field and float(53) holds an 8-byte field. Default
value of n is 53.
real Floating precision number data from -3.40E + 38 to 3.40E + 38 4 bytes
Date types:
datetime From January 1, 1753 to December 31, 9999 with an accuracy of 3.33 8 bytes
milliseconds
datetime2 From January 1, 0001 and December 31, 9999 with an accuracy of 100 6-8 bytes
nanoseconds
smalldatetime From January 1, 1900 to June 6, 2079 with an accuracy of 1 minute 4 bytes
date Store a date only. From January 1, 0001 to December 31, 9999 3 bytes
datetimeoffset The same as datetime2 with the addition of a time zone offset 8-10
bytes
timestamp Stores a unique number that gets updated every time a row gets created or
modified. The timestamp value is based upon an internal clock and does
not correspond to real time. Each table may have only one timestamp
variable
sql_variant Stores up to 8,000 bytes of data of various data types, except text, ntext, and
timestamp
SQL Data Types
3
Data types and ranges for Microsoft Access, MySQL and SQL Server.
Text Use for text or combinations of text and numbers. 255 characters
maximum
Memo Memo is used for larger amounts of text. Stores up to 65,536 characters.
Note: You cannot sort a memo field. However, they are searchable
Currency Use for currency. Holds up to 15 digits of whole dollars, plus 4 decimal 8 bytes
places. Tip: You can choose which country's currency to use
AutoNumber AutoNumber fields automatically give each record its own number, usually 4 bytes
starting at 1
Yes/No A logical field can be displayed as Yes/No, True/False, or On/Off. In code, 1 bit
use the constants True and False (equivalent to -1 and 0). Note: Null
values are not allowed in Yes/No fields
Ole Object Can store pictures, audio, video, or other BLOBs (Binary Large OBjects) up to 1GB
Lookup Wizard Let you type a list of options, which can then be chosen from a drop-down 4 bytes
list
In MySQL there are three main types : text, number, and Date/Time types.
Text types:
CHAR(size) Holds a fixed length string (can contain letters, numbers, and special characters). The
fixed size is specified in parenthesis. Can store up to 255 characters
VARCHAR(size) Holds a variable length string (can contain letters, numbers, and special characters).
The maximum size is specified in parenthesis. Can store up to 255 characters. Note:
If you put a greater value than 255 it will be converted to a TEXT type
BLOB For BLOBs (Binary Large OBjects). Holds up to 65,535 bytes of data
MEDIUMBLOB For BLOBs (Binary Large OBjects). Holds up to 16,777,215 bytes of data
LONGBLOB For BLOBs (Binary Large OBjects). Holds up to 4,294,967,295 bytes of data
ENUM(x,y,z,etc.) Let you enter a list of possible values. You can list up to 65535 values in an ENUM list.
If a value is inserted that is not in the list, a blank value will be inserted.
Note: The values are sorted in the order you enter them.
Number types:
TINYINT(size) -128 to 127 normal. 0 to 255 UNSIGNED*. The maximum number of digits may be
specified in parenthesis
SMALLINT(size) -32768 to 32767 normal. 0 to 65535 UNSIGNED*. The maximum number of digits
may be specified in parenthesis
FLOAT(size,d) A small number with a floating decimal point. The maximum number of digits may be
specified in the size parameter. The maximum number of digits to the right of the
decimal point is specified in the d parameter
DOUBLE(size,d) A large number with a floating decimal point. The maximum number of digits may be
specified in the size parameter. The maximum number of digits to the right of the
decimal point is specified in the d parameter
DECIMAL(size,d) A DOUBLE stored as a string , allowing for a fixed decimal point. The maximum
number of digits may be specified in the size parameter. The maximum number of
digits to the right of the decimal point is specified in the d parameter
*The integer types have an extra option called UNSIGNED. Normally, the integer goes from an negative to
positive value. Adding the UNSIGNED attribute will move that range up so it starts at zero instead of a
negative number.
Date types:
Note: Values allowed in four-digit format: 1901 to 2155. Values allowed in two-digit
format: 70 to 69, representing years from 1970 to 2069
*Even if DATETIME and TIMESTAMP return the same format, they work very differently. In an INSERT or
UPDATE query, the TIMESTAMP automatically set itself to the current date and time. TIMESTAMP also
accepts various formats, like YYYYMMDDHHMMSS, YYMMDDHHMMSS, YYYYMMDD, or YYMMDD.
SQL Server Data Types
Character strings:
Unicode strings:
Binary types:
Number types:
The p parameter indicates the maximum total number of digits that can be
stored (both to the left and to the right of the decimal point). p must be a
value from 1 to 38. Default is 18.
The p parameter indicates the maximum total number of digits that can be
stored (both to the left and to the right of the decimal point). p must be a
value from 1 to 38. Default is 18.
float(n) Floating precision number data from -1.79E + 308 to 1.79E + 308. 4 or 8
bytes
The n parameter indicates whether the field should hold 4 or 8 bytes.
float(24) holds a 4-byte field and float(53) holds an 8-byte field. Default
value of n is 53.
real Floating precision number data from -3.40E + 38 to 3.40E + 38 4 bytes
Date types:
datetime From January 1, 1753 to December 31, 9999 with an accuracy of 3.33 8 bytes
milliseconds
datetime2 From January 1, 0001 and December 31, 9999 with an accuracy of 100 6-8 bytes
nanoseconds
smalldatetime From January 1, 1900 to June 6, 2079 with an accuracy of 1 minute 4 bytes
date Store a date only. From January 1, 0001 to December 31, 9999 3 bytes
datetimeoffset The same as datetime2 with the addition of a time zone offset 8-10
bytes
timestamp Stores a unique number that gets updated every time a row gets created or
modified. The timestamp value is based upon an internal clock and does
not correspond to real time. Each table may have only one timestamp
variable
sql_variant Stores up to 8,000 bytes of data of various data types, except text, ntext, and
timestamp
SQL AVG() Function
3
SQL AVG() Syntax
SELECT AVG(column_name) FROM table_name
OrderAverage
950
Now we want to find the customers that have an OrderPrice value higher then the average OrderPrice value.
Customer
Hansen
Nilsen
Jensen
SQL COUNT() Function
4
The COUNT() function returns the number of rows that matches a specified criteria.
SQL COUNT(column_name) Syntax
The COUNT(column_name) function returns the number of values (NULL values will not be counted) of the
specified column:
SQL COUNT(*) Syntax
SQL COUNT(DISTINCT column_name) Syntax
The COUNT(DISTINCT column_name) function returns the number of distinct values of the specified column:
Note: COUNT(DISTINCT) works with ORACLE and Microsoft SQL Server, but not with Microsoft Access.
The result of the SQL statement above will be 2, because the customer Nilsen has made 2 orders in total:
CustomerNilsen
NumberOfOrders
Now we want to count the number of unique customers in the "Orders" table.
NumberOfCustomers
which is the number of unique customers (Hansen, Nilsen, and Jensen) in the "Orders" table.
SQL FIRST() Function
4
The FIRST() function returns the first value of the selected column.
SQL FIRST() Syntax
SELECT FIRST(column_name) FROM table_name
FirstOrderPrice
1000
SQL LAST() Function
4
The LAST() function returns the last value of the selected column.
SQL LAST() Syntax
SELECT LAST(column_name) FROM table_name
LastOrderPrice
100
SQL MAX() Function
4
The MAX() function returns the largest value of the selected column.
SQL MAX() Syntax
SELECT MAX(column_name) FROM table_name
LargestOrderPrice
2000
SQL MAX() Function
4
The MAX() function returns the largest value of the selected column.
SQL MAX() Syntax
SELECT MAX(column_name) FROM table_name
LargestOrderPrice
2000
SQL SUM() Function
5
SQL SUM() Syntax
SELECT SUM(column_name) FROM table_name
OrderTotal
5700
SQL GROUP BY Statement
5
The GROUP BY statement is used in conjunction with the aggregate functions to group the result-set by one
or more columns.
SQL GROUP BY Syntax
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
Now we want to find the total sum (total order) of each customer.
Customer SUM(OrderPrice)
Hansen 2000
Nilsen 1700
Jensen 2000
Customer SUM(OrderPrice)
Hansen 5700
Nilsen 5700
Hansen 5700
Hansen 5700
Jensen 5700
Nilsen 5700
Explanation of why the above SELECT statement cannot be used: The SELECT statement above has
two columns specified (Customer and SUM(OrderPrice). The "SUM(OrderPrice)" returns a single value (that
is the total sum of the "OrderPrice" column), while "Customer" returns 6 values (one value for each row in
the "Orders" table). This will therefore not give us the correct result. However, you have seen that the
GROUP BY statement solves this problem.
We can also use the GROUP BY statement on more than one column, like this:
The HAVING clause was added to SQL because the WHERE keyword could not be used with aggregate
functions.
SQL HAVING Syntax
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value
Now we want to find if any of the customers have a total order of less than 2000.
Nilsen 1700
Now we want to find if the customers "Hansen" or "Jensen" have a total order of more than 1500.
Customer SUM(OrderPrice)
Hansen 2000
Jensen 2000
SQL UCASE() Function
5
SQL UCASE() Syntax
SELECT UCASE(column_name) FROM table_name
Now we want to select the content of the "LastName" and "FirstName" columns above, and convert the
"LastName" column to uppercase.
LastName FirstName
HANSEN Ola
SVENDSON Tove
PETTERSEN Kari
SQL LCASE() Function
5
SQL LCASE() Syntax
SELECT LCASE(column_name) FROM table_name
Now we want to select the content of the "LastName" and "FirstName" columns above, and convert the
"LastName" column to lowercase.
LastName FirstName
hansen Ola
svendson Tove
pettersen Kari
SQL MID() Function
6
SQL MID() Syntax
SELECT MID(column_name,start[,length]) FROM table_name
Parameter Description
length Optional. The number of characters to return. If omitted, the MID() function returns
the rest of the text.
Now we want to extract the first four characters of the "City" column above.
SmallCity
Sand
Sand
Stav
SQL LEN() Function
6
The LEN() function returns the length of the value in a text field.
SQL LEN() Syntax
SELECT LEN(column_name) FROM table_name
Now we want to select the length of the values in the "Address" column above.
LengthOfAddress
12
SQL ROUND() Function
6
The ROUND() function is used to round a numeric field to the number of decimals specified.
SQL ROUND() Syntax
SELECT ROUND(column_name,decimals) FROM table_name
Parameter Description
Now we want to display the product name and the price rounded to the nearest integer.
ProductName UnitPrice
Jarlsberg 10
Mascarpone 33
Gorgonzola 16
SQL NOW() Function
6
The NOW() Function
The NOW() function returns the current system date and time.
SQL NOW() Syntax
SELECT NOW() FROM table_name
Now we want to display the products and prices per today's date.
SQL FORMAT() Function
6
The FORMAT() Function
SQL FORMAT() Syntax
SELECT FORMAT(column_name,format) FROM table_name
Parameter Description
Now we want to display the products and prices per today's date (with today's date displayed in the
following format "YYYY-MM-DD").
or
or
SELECT column_name
FROM table_name AS table_alias
BETWEEN SELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2
or
or
IN SELECT column_name(s)
FROM table_name
WHERE column_name
IN (value1,value2,..)
or
SELECT * SELECT *
FROM table_name
or
SELECT column_name(s)
INTO new_table_name [IN externaldatabase]
FROM old_table_name
SELECT TOP SELECT TOP number|percent column_name(s)
FROM table_name
Source : http://www.w3schools.com/sql/sql_quickref.asp
SQL Hosting
7
SQL Hosting
If you want your web site to be able to store and display data from a database, your web server should have
access to a database system that uses the SQL language.
If your web server will be hosted by an Internet Service Provider (ISP), you will have to look for SQL hosting
plans.
The most common SQL hosting databases are MySQL, MS SQL Server, and MS Access.
You can have SQL databases on both Windows and Linux/UNIX operating systems.
MS SQL Server
MySQL
To learn more about web hosting, please visit our Hosting tutorial.
You Have Learned SQL, Now What?
7
SQL Summary
This SQL tutorial has taught you the standard computer language for accessing and manipulating database
systems.
You have learned how to execute queries, retrieve data, insert new records, delete records and update
records in a database with SQL.
You have also learned how to create databases, tables, and indexes with SQL, and how to drop them.
You now know that SQL is the standard language that works with all the well-known database systems like
MS SQL Server, IBM DB2, Oracle, MySQL, and MS Access.
If you want to learn more about ADO, please visit our ADO tutorial.
If you want to learn more about MySQL, please visit our PHP tutorial
PHP
http://www.w3schools.com/php/default.asp
PHP Tutorial
8
PHP Tutorial
PHP is a powerful server-side scripting language for creating dynamic and
interactive websites.
The PHP syntax is very similar to Perl and C. PHP is often used together with
Apache (web server) on various operating systems. It also supports ISAPI and can
be used with Microsoft's IIS on Windows.
PHP References
• Array functions
• Calendar functions
• Date functions
• Directory functions
• Error functions
• Filesystem functions
• Filter functions
• FTP functions
• HTTP functions
• LibXML functions
• Mail functions
• Math functions
• Misc functions
• MySQL functions
• SimpleXML functions
• String functions
• XML Parser functions
• Zip functions
The perfect solution for busy professionals who need to balance work, family, and
career building.
The HTML Certificate documents your knowledge of HTML, XHTML, and CSS.
The JavaScript Certificate documents your knowledge of JavaScript and HTML DOM.
The XML Certificate documents your knowledge of XML, XML DOM and XSLT.
The ASP Certificate documents your knowledge of ASP, SQL, and ADO.
The PHP Certificate documents your knowledge of PHP and SQL (MySQL).
Before you continue you should have a basic understanding of the following:
• HTML
• Some scripting knowledge
If you want to study these subjects first, find the tutorials on our Home page.
What is PHP?
What is MySQL?
PHP + MySQL
• PHP combined with MySQL are cross-platform (you can develop in Windows and serve on a Unix
platform)
Why PHP?
Where to Start?
• Install Apache (or IIS) on your own server, install PHP, and MySQL
• Or find a web hosting plan with PHP and MySQL support
PHP Installation
1
What do You Need?
If your server supports PHP you don't need to do anything. Just create some .php files in your web
directory, and the server will parse them for you. Because it is free, most web hosts offer PHP support.
However, if your server does not support PHP, you must install PHP.
Download PHP
Download PHP for free here: http://www.php.net/downloads.php
Download MySQL Database
Download MySQL for free here: http://www.mysql.com/downloads/index.html
Download Apache Server
Download Apache for free here: http://httpd.apache.org/download.cgi
PHP Syntax
1
PHP code is executed on the server, and the plain HTML result is sent to the browser.
A PHP scripting block always starts with <?php and ends with ?>. A PHP scripting block can be placed
anywhere in the document.
On servers with shorthand support enabled you can start a scripting block with <? and end with ?>.
For maximum compatibility, we recommend that you use the standard form (<?php) rather than the
shorthand form.
<?php
?>
A PHP file normally contains HTML tags, just like an HTML file, and some PHP scripting code.
Below, we have an example of a simple PHP script which sends the text "Hello World" to the browser:
<html>
<body>
<?php
echo "Hello World";
?>
</body>
</html>
Each code line in PHP must end with a semicolon. The semicolon is a separator and is used to distinguish
one set of instructions from another.
There are two basic statements to output text with PHP: echo and print. In the example above we have
used the echo statement to output the text "Hello World".
Note: The file must have the .php extension. If the file has a .html extension, the PHP code will not be
executed.
Comments in PHP
In PHP, we use // to make a single-line comment or /* and */ to make a large comment block.
<html>
<body>
<?php
//This is a comment
/*
This is
a comment
block
*/
?>
</body>
</html>
PHP Variables
1
Variables are used for storing values, such as numbers, strings or function results, so that they
can be used many times in a script.
Variables in PHP
Variables are used for storing a values, like text strings, numbers or arrays.
When a variable is set it can be used over and over again in your script
$var_name = value;
New PHP programmers often forget the $ sign at the beginning of the variable. In that case it will not work.
Let's try creating a variable with a string, and a variable with a number:
<?php
$txt = "Hello World!";
$number = 16;
?>
PHP is a Loosely Typed Language
In the example above, you see that you do not have to tell PHP which data type the variable is.
PHP automatically converts the variable to the correct data type, depending on how they are set.
In a strongly typed programming language, you have to declare (define) the type and name of the variable
before using it.
PHP String
1
Strings in PHP
String variables are used for values that contains character strings.
In this tutorial we are going to look at some of the most common functions and operators used to
manipulate strings in PHP.
After we create a string we can manipulate it. A string can be used directly in a function or it can be stored
in a variable.
Below, the PHP script assigns the string "Hello World" to a string variable called $txt:
<?php
$txt="Hello World";
echo $txt;
?>
Now, lets try to use some different functions and operators to manipulate our string.
The concatenation operator (.) is used to put two string values together.
<?php
$txt1="Hello World";
$txt2="1234";
echo $txt1 . " " . $txt2;
?>
If we look at the code above you see that we used the concatenation operator two times. This is because we
had to insert a third string.
Between the two string variables we added a string with a single character, an empty space, to separate the
two variables.
<?php
echo strlen("Hello world!");
?>
12
The length of a string is often used in loops or other functions, when it is important to know when the string
ends. (i.e. in a loop, we would want to stop the loop after the last character in the string)
Using the strpos() function
The strpos() function is used to search for a string or character within a string.
If a match is found in the string, this function will return the position of the first match. If no match is found,
it will return FALSE.
<?php
echo strpos("Hello world!","world");
?>
As you see the position of the string "world" in our string is position 6. The reason that it is 6, and not 7, is
that the first position in the string is 0, and not 1.
For a complete reference of all string functions, go to our complete PHP String Reference.
The reference contains a brief description and examples of use for each function!
1
PHP String
1
Strings in PHP
String variables are used for values that contains character strings.
In this tutorial we are going to look at some of the most common functions and operators used to
manipulate strings in PHP.
After we create a string we can manipulate it. A string can be used directly in a function or it can be stored
in a variable.
Below, the PHP script assigns the string "Hello World" to a string variable called $txt:
<?php
$txt="Hello World";
echo $txt;
?>
Hello World
Now, lets try to use some different functions and operators to manipulate our string.
The concatenation operator (.) is used to put two string values together.
<?php
$txt1="Hello World";
$txt2="1234";
echo $txt1 . " " . $txt2;
?>
If we look at the code above you see that we used the concatenation operator two times. This is because we
had to insert a third string.
Between the two string variables we added a string with a single character, an empty space, to separate the
two variables.
<?php
echo strlen("Hello world!");
?>
12
The length of a string is often used in loops or other functions, when it is important to know when the string
ends. (i.e. in a loop, we would want to stop the loop after the last character in the string)
The strpos() function is used to search for a string or character within a string.
If a match is found in the string, this function will return the position of the first match. If no match is found,
it will return FALSE.
<?php
echo strpos("Hello world!","world");
?>
As you see the position of the string "world" in our string is position 6. The reason that it is 6, and not 7, is
that the first position in the string is 0, and not 1.
For a complete reference of all string functions, go to our complete PHP String Reference.
The reference contains a brief description and examples of use for each function!
PHP If...Else Statements
1
The if, elseif and else statements in PHP are used to perform different actions based on different
conditions.
Conditional Statements
Very often when you write code, you want to perform different actions for different decisions.
• if...else statement - use this statement if you want to execute a set of code when a condition is
true and another if the condition is not true
• elseif statement - is used with the if...else statement to execute a set of code if one of several
condition are true
If you want to execute some code if a condition is true and another code if a condition is false, use the
if....else statement.
Syntax
if (condition)
code to be executed if condition is true;
else
code to be executed if condition is false;
Example
The following example will output "Have a nice weekend!" if the current day is Friday, otherwise it will
output "Have a nice day!":
<html>
<body>
<?php
$d=date("D");
if ($d=="Fri")
echo "Have a nice weekend!";
else
echo "Have a nice day!";
?>
</body>
</html>
If more than one line should be executed if a condition is true/false, the lines should be enclosed within
curly braces:
<html>
<body>
<?php
$d=date("D");
if ($d=="Fri")
{
echo "Hello!<br />";
echo "Have a nice weekend!";
echo "See you on Monday!";
}
?>
</body>
</html>
If you want to execute some code if one of several conditions are true use the elseif statement
Syntax
if (condition)
code to be executed if condition is true;
elseif (condition)
code to be executed if condition is true;
else
code to be executed if condition is false;
Example
The following example will output "Have a nice weekend!" if the current day is Friday, and "Have a nice
Sunday!" if the current day is Sunday. Otherwise it will output "Have a nice day!":
<html>
<body>
<?php
$d=date("D");
if ($d=="Fri")
echo "Have a nice weekend!";
elseif ($d=="Sun")
echo "Have a nice Sunday!";
else
echo "Have a nice day!";
?>
</body>
</html>
1
PHP Switch Statement
1
The Switch statement in PHP is used to perform one of several different actions based on one of
several different conditions.
If you want to select one of many blocks of code to be executed, use the Switch statement.
Syntax
switch (expression)
{
case label1:
code to be executed if expression = label1;
break;
case label2:
code to be executed if expression = label2;
break;
default:
code to be executed
if expression is different
from both label1 and label2;
}
Example
<html>
<body>
<?php
switch ($x)
{
case 1:
echo "Number 1";
break;
case 2:
echo "Number 2";
break;
case 3:
echo "Number 3";
break;
default:
echo "No number between 1 and 3";
}
?>
</body>
</html>
PHP Arrays
1
What is an array?
When working with PHP, sooner or later, you might want to create many similar variables.
Instead of having many similar variables, you can store the data as elements in an array.
Each element in the array has its own ID so that it can be easily accessed.
Numeric Arrays
Example 1
$names = array("Peter","Quagmire","Joe");
Example 2
$names[0] = "Peter";
$names[1] = "Quagmire";
$names[2] = "Joe";
<?php
$names[0] = "Peter";
$names[1] = "Quagmire";
$names[2] = "Joe";
echo $names[1] . " and " . $names[2] .
" are ". $names[0] . "'s neighbors";
?>
Associative Arrays
When storing data about specific named values, a numerical array is not always the best way to do it.
With associative arrays we can use the values as keys and assign values to them.
Example 1
Example 2
This example is the same as example 1, but shows a different way of creating the array:
$ages['Peter'] = "32";
$ages['Quagmire'] = "30";
$ages['Joe'] = "34";
<?php
$ages['Peter'] = "32";
$ages['Quagmire'] = "30";
$ages['Joe'] = "34";
echo "Peter is " . $ages['Peter'] . " years old.";
?>
Multidimensional Arrays
In a multidimensional array, each element in the main array can also be an array. And each element in the
sub-array can be an array, and so on.
Example
$families = array
(
"Griffin"=>array
(
"Peter",
"Lois",
"Megan"
),
"Quagmire"=>array
(
"Glenn"
),
"Brown"=>array
(
"Cleveland",
"Loretta",
"Junior"
)
);
The array above would look like this if written to the output:
Array
(
[Griffin] => Array
(
[0] => Peter
[1] => Lois
[2] => Megan
)
[Quagmire] => Array
(
[0] => Glenn
)
[Brown] => Array
(
[0] => Cleveland
[1] => Loretta
[2] => Junior
)
)
Example 2
1
PHP Looping
1
Looping statements in PHP are used to execute the same block of code a specified number of
times.
Looping
Very often when you write code, you want the same block of code to run a number of times. You can use
looping statements in your code to perform this.
• while - loops through a block of code if and as long as a specified condition is true
• do...while - loops through a block of code once, and then repeats the loop as long as a special
condition is true
• for - loops through a block of code a specified number of times
• foreach - loops through a block of code for each element in an array
The while statement will execute a block of code if and as long as a condition is true.
Syntax
while (condition)
code to be executed;
Example
The following example demonstrates a loop that will continue to run as long as the variable i is less than, or
equal to 5. i will increase by 1 each time the loop runs:
<html>
<body>
<?php
$i=1;
while($i<=5)
{
echo "The number is " . $i . "<br />";
$i++;
}
?>
</body>
</html>
The do...while statement will execute a block of code at least once - it then will repeat the loop as long as
a condition is true.
Syntax
do
{
code to be executed;
}
while (condition);
Example
The following example will increment the value of i at least once, and it will continue incrementing the
variable i as long as it has a value of less than 5:
<html>
<body>
<?php
$i=0;
do
{
$i++;
echo "The number is " . $i . "<br />";
}
while ($i<5);
?>
</body>
</html>
In it's simplest form, the for statement is used when you know how many times you want to execute a
statement or a list of statements.
Syntax
for (init; cond; incr)
{
code to be executed;
}
Parameters:
• init: Is mostly used to set a counter, but can be any code to be executed once at the beginning of
the loop statement.
• cond: Is evaluated at beginning of each loop iteration. If the condition evaluates to TRUE, the loop
continues and the code executes. If it evaluates to FALSE, the execution of the loop ends.
• incr: Is mostly used to increment a counter, but can be any code to be executed at the end of each
loop.
Note: Each of the parameters can be empty or have multiple expressions separated by commas.
• cond: All expressions separated by a comma are evaluated but the result is taken from the last
part. This parameter being empty means the loop should be run indefinitely. This is useful when
using a conditional break statement inside the loop for ending the loop.
Example
The following example prints the text "Hello World!" five times:
<html>
<body>
<?php
for ($i=1; $i<=5; $i++)
{
echo "Hello World!<br />";
}
?>
</body>
</html>
For every loop, the value of the current array element is assigned to $value (and the array pointer is moved
by one) - so on the next loop, you'll be looking at the next element.
Syntax
foreach (array as value)
{
code to be executed;
}
Example
The following example demonstrates a loop that will print the values of the given array:
<html>
<body>
<?php
$arr=array("one", "two", "three");
foreach ($arr as $value)
{
echo "Value: " . $value . "<br />";
}
?>
</body>
</html>
1
PHP Functions
1
The real power of PHP comes from its functions.
PHP Functions
In this tutorial we will show you how to create your own functions.
For a reference and examples of the built-in functions, please visit our PHP Reference.
Example
<html>
<body>
<?php
function writeMyName()
{
echo "Kai Jim Refsnes";
}
writeMyName();
?>
</body>
</html>
<html>
<body>
<?php
function writeMyName()
{
echo "Kai Jim Refsnes";
}
echo "Hello world!<br />";
echo "My name is ";
writeMyName();
echo ".<br />That's right, ";
writeMyName();
echo " is my name.";
?>
</body>
</html>
Hello world!
My name is Kai Jim Refsnes.
That's right, Kai Jim Refsnes is my name.
Our first function (writeMyName()) is a very simple function. It only writes a static string.
To add more functionality to a function, we can add parameters. A parameter is just like a variable.
You may have noticed the parentheses after the function name, like: writeMyName(). The parameters are
specified inside the parentheses.
Example 1
The following example will write different first names, but the same last name:
<html>
<body>
<?php
function writeMyName($fname)
{
echo $fname . " Refsnes.<br />";
}
echo "My name is ";
writeMyName("Kai Jim");
echo "My name is ";
writeMyName("Hege");
echo "My name is ";
writeMyName("Stale");
?>
</body>
</html>
Example 2
<html>
<body>
<?php
function writeMyName($fname,$punctuation)
{
echo $fname . " Refsnes" . $punctuation . "<br />";
}
echo "My name is ";
writeMyName("Kai Jim",".");
echo "My name is ";
writeMyName("Hege","!");
echo "My name is ";
writeMyName("Ståle","...");
?>
</body>
</html>
Example
<html>
<body>
<?php
function add($x,$y)
{
$total = $x + $y;
return $total;
}
echo "1 + 16 = " . add(1,16);
?>
</body>
</html>
1
PHP Forms and User Input
1
The PHP $_GET and $_POST variables are used to retrieve information from forms, like user
input.
The most important thing to notice when dealing with HTML forms and PHP is that any form element in an
HTML page will automatically be available to your PHP scripts.
Form example:
<html>
<body>
<form action="welcome.php" method="post">
Name: <input type="text" name="name" />
Age: <input type="text" name="age" />
<input type="submit" />
</form>
</body>
</html>
The example HTML page above contains two input fields and a submit button. When the user fills in this
form and click on the submit button, the form data is sent to the "welcome.php" file.
<html>
<body>
Welcome <?php echo $_POST["name"]; ?>.<br />
You are <?php echo $_POST["age"]; ?> years old.
</body>
</html>
A sample output of the above script may be:
Welcome John.
You are 28 years old.
The PHP $_GET and $_POST variables will be explained in the next chapters.
Form Validation
User input should be validated whenever possible. Client side validation is faster, and will reduce server
load.
However, any site that gets enough traffic to worry about server resources, may also need to worry about
site security. You should always use server side validation if the form accesses a database.
A good way to validate a form on the server is to post the form to itself, instead of jumping to a different
page. The user will then get the error messages on the same page as the form. This makes it easier to
discover the error.
1
PHP $_GET
1
The $_GET variable is used to collect values from a form with method="get".
The $_GET variable is an array of variable names and values sent by the HTTP GET method.
The $_GET variable is used to collect values from a form with method="get". Information sent from a form
with the GET method is visible to everyone (it will be displayed in the browser's address bar) and it has
limits on the amount of information to send (max. 100 characters).
Example
<form action="welcome.php" method="get">
Name: <input type="text" name="name" />
Age: <input type="text" name="age" />
<input type="submit" />
</form>
When the user clicks the "Submit" button, the URL sent could look something like this:
http://www.w3schools.com/welcome.php?name=Peter&age=37
The "welcome.php" file can now use the $_GET variable to catch the form data (notice that the names of the
form fields will automatically be the ID keys in the $_GET array):
Note: When using the $_GET variable all variable names and values are displayed in the URL. So this
method should not be used when sending passwords or other sensitive information! However, because the
variables are displayed in the URL, it is possible to bookmark the page. This can be useful in some cases.
Note: The HTTP GET method is not suitable on large variable values; the value cannot exceed 100
characters.
The PHP $_REQUEST variable contains the contents of both $_GET, $_POST, and $_COOKIE.
The PHP $_REQUEST variable can be used to get the result from form data sent with both the GET and POST
methods.
Example
Welcome <?php echo $_REQUEST["name"]; ?>.<br />
You are <?php echo $_REQUEST["age"]; ?> years old!
1
PHP $_GET
1
The $_GET variable is used to collect values from a form with method="get".
The $_GET Variable
The $_GET variable is an array of variable names and values sent by the HTTP GET method.
The $_GET variable is used to collect values from a form with method="get". Information sent from a form
with the GET method is visible to everyone (it will be displayed in the browser's address bar) and it has
limits on the amount of information to send (max. 100 characters).
Example
<form action="welcome.php" method="get">
Name: <input type="text" name="name" />
Age: <input type="text" name="age" />
<input type="submit" />
</form>
When the user clicks the "Submit" button, the URL sent could look something like this:
http://www.w3schools.com/welcome.php?name=Peter&age=37
The "welcome.php" file can now use the $_GET variable to catch the form data (notice that the names of the
form fields will automatically be the ID keys in the $_GET array):
Note: When using the $_GET variable all variable names and values are displayed in the URL. So this
method should not be used when sending passwords or other sensitive information! However, because the
variables are displayed in the URL, it is possible to bookmark the page. This can be useful in some cases.
Note: The HTTP GET method is not suitable on large variable values; the value cannot exceed 100
characters.
The PHP $_REQUEST variable contains the contents of both $_GET, $_POST, and $_COOKIE.
The PHP $_REQUEST variable can be used to get the result from form data sent with both the GET and POST
methods.
Example
Welcome <?php echo $_REQUEST["name"]; ?>.<br />
You are <?php echo $_REQUEST["age"]; ?> years old!
1
PHP Date()
1
The PHP date() function formats a timestamp to a more readable date and time.
Syntax
date(format,timestamp)
Parameter Description
timestamp Optional. Specifies a timestamp. Default is the current date and time (as a timestamp)
A timestamp is the number of seconds since January 1, 1970 at 00:00:00 GMT. This is also known as the
Unix Timestamp.
The first parameter in the date() function specifies how to format the date/time. It uses letters to represent
date and time formats. Here are some of the letters that can be used:
Other characters, like"/", ".", or "-" can also be inserted between the letters to add additional formatting:
<?php
echo date("Y/m/d");
echo "<br />";
echo date("Y.m.d");
echo "<br />";
echo date("Y-m-d");
?>
2006/07/11
2006.07.11
2006-07-11
The second parameter in the date() function specifies a timestamp. This parameter is optional. If you do not
supply a timestamp, the current time will be used.
In our next example we will use the mktime() function to create a timestamp for tomorrow.
The mktime() function returns the Unix timestamp for a specified date.
Syntax
mktime(hour,minute,second,month,day,year,is_dst)
To go one day in the future we simply add one to the day argument of mktime():
<?php
$tomorrow = mktime(0,0,0,date("m"),date("d")+1,date("Y"));
echo "Tomorrow is ".date("Y/m/d", $tomorrow);
?>
Tomorrow is 2006/07/12
For more information about all the PHP date functions, please visit our PHP Date Reference.
1
PHP Include File
1
Server Side Includes (SSI) are used to create functions, headers, footers, or elements that will
be reused on multiple pages.
You can insert the content of a file into a PHP file before the server executes it, with the include() or
require() function. The two functions are identical in every way, except how they handle errors. The
include() function generates a warning (but the script will continue execution) while the require() function
generates a fatal error (and the script execution will stop after the error).
These two functions are used to create functions, headers, footers, or elements that can be reused on
multiple pages.
This can save the developer a considerable amount of time. This means that you can create a standard
header or menu file that you want all your web pages to include. When the header needs to be updated, you
can only update this one include file, or when you add a new page to your site, you can simply change the
menu file (instead of updating the links on all web pages).
The include() function takes all the text in a specified file and copies it into the file that uses the include
function.
Example 1
Assume that you have a standard header file, called "header.php". To include the header file in a page, use
the include() function, like this:
<html>
<body>
<?php include("header.php"); ?>
<h1>Welcome to my home page</h1>
<p>Some text</p>
</body>
</html>
Example 2
Now, let's assume we have a standard menu file that should be used on all pages (include files usually have
a ".php" extension). Look at the "menu.php" file below:
<html>
<body>
<a href="http://www.w3schools.com/default.php">Home</a> |
<a href="http://www.w3schools.com/about.php">About Us</a> |
<a href="http://www.w3schools.com/contact.php">Contact Us</a>
The three files, "default.php", "about.php", and "contact.php" should all include the "menu.php" file. Here is
the code in "default.php":
If you look at the source code of the "default.php" in a browser, it will look something like this:
<html>
<body>
<a href="default.php">Home</a> |
<a href="about.php">About Us</a> |
<a href="contact.php">Contact Us</a>
<h1>Welcome to my home page</h1>
<p>Some text</p>
</body>
</html>
And, of course, we would have to do the same thing for "about.php" and "contact.php". By using include
files, you simply have to update the text in the "menu.php" file if you decide to rename or change the order
of the links or add another web page to the site.
The require() function is identical to include(), except that it handles errors differently.
The include() function generates a warning (but the script will continue execution) while the require()
function generates a fatal error (and the script execution will stop after the error).
If you include a file with the include() function and an error occurs, you might get an error message like the
one below.
PHP code:
<html>
<body>
<?php
include("wrongFile.php");
echo "Hello World!";
?>
</body>
</html>
Error message:
Notice that the echo statement is still executed! This is because a Warning does not stop the script
execution.
Now, let's run the same example with the require() function.
PHP code:
<html>
<body>
<?php
require("wrongFile.php");
echo "Hello World!";
?>
</body>
</html>
Error message:
The echo statement was not executed because the script execution stopped after the fatal error.
It is recommended to use the require() function instead of include(), because scripts should not continue
executing if files are missing or misnamed.
1
PHP File Handling
1
Opening a File
The first parameter of this function contains the name of the file to be opened and the second parameter
specifies in which mode the file should be opened:
<html>
<body>
<?php
$file=fopen("welcome.txt","r");
?>
</body>
</html>
Modes Description
w Write only. Opens and clears the contents of file; or creates a new file if it doesn't
exist
w+ Read/Write. Opens and clears the contents of file; or creates a new file if it doesn't
exist
a Append. Opens and writes to the end of the file or creates a new file if it doesn't exist
x Write only. Creates a new file. Returns FALSE and an error if file already exists
x+ Read/Write. Creates a new file. Returns FALSE and an error if file already exists
Note: If the fopen() function is unable to open the specified file, it returns 0 (false).
Example
The following example generates a message if the fopen() function is unable to open the specified file:
<html>
<body>
<?php
$file=fopen("welcome.txt","r") or exit("Unable to open file!");
?>
</body>
</html>
Closing a File
<?php
$file = fopen("test.txt","r");
//some code to be executed
fclose($file);
?>
Check End-of-file
The feof() function checks if the "end-of-file" (EOF) has been reached.
The feof() function is useful for looping through data of unknown length.
Note: After a call to this function the file pointer has moved to the next line.
Example
The example below reads a file line by line, until the end of file is reached:
<?php
$file = fopen("welcome.txt", "r") or exit("Unable to open file!");
//Output a line of the file until the end is reached
while(!feof($file))
{
echo fgets($file). "<br />";
}
fclose($file);
?>
Note: After a call to this function the file pointer moves to the next character.
Example
The example below reads a file character by character, until the end of file is reached:
<?php
$file=fopen("welcome.txt","r") or exit("Unable to open file!");
while (!feof($file))
{
echo fgetc($file);
}
fclose($file);
?>
For a full reference of the PHP filesystem functions, visit our PHP Filesystem Reference.
PHP File Upload
1
<html>
<body>
<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" />
<br />
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>
• The enctype attribute of the <form> tag specifies which content-type to use when submitting the
form. "multipart/form-data" is used when a form requires binary data, like the contents of a file, to
be uploaded
• The type="file" attribute of the <input> tag specifies that the input should be processed as a file.
For example, when viewed in a browser, there will be a browse-button next to the input field
Note: Allowing users to upload files is a big security risk. Only permit trusted users to perform file uploads.
<?php
if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Stored in: " . $_FILES["file"]["tmp_name"];
}
?>
By using the global PHP $_FILES array you can upload files from a client computer to the remote server.
The first parameter is the form's input name and the second index can be either "name", "type", "size",
"tmp_name" or "error". Like this:
This is a very simple way of uploading files. For security reasons, you should add restrictions on what the
user is allowed to upload.
Restrictions on Upload
In this script we add some restrictions to the file upload. The user may only upload .gif or .jpeg files and the
file size must be under 20 kb:
<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Stored in: " . $_FILES["file"]["tmp_name"];
}
}
else
{
echo "Invalid file";
}
?>
Note: For IE to recognize jpg files the type must be pjpeg, for FireFox it must be jpeg.
Saving the Uploaded File
The examples above create a temporary copy of the uploaded files in the PHP temp folder on the server.
The temporary copied files disappears when the script ends. To store the uploaded file we need to copy it to
a different location:
<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
if (file_exists("upload/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
}
}
}
else
{
echo "Invalid file";
}
?>
The script above checks if the file already exists, if it does not, it copies the file to the specified folder.
Note: This example saves the file to a new folder called "upload"
1
PHP Cookies
1
What is a Cookie?
A cookie is often used to identify a user. A cookie is a small file that the server embeds on the user's
computer. Each time the same computer requests a page with a browser, it will send the cookie too. With
PHP, you can both create and retrieve cookie values.
Note: The setcookie() function must appear BEFORE the <html> tag.
Syntax
setcookie(name, value, expire, path, domain);
Example 1
In the example below, we will create a cookie named "user" and assign the value "Alex Porter" to it. We also
specify that the cookie should expire after one hour:
<?php
setcookie("user", "Alex Porter", time()+3600);
?>
<html>
.....
Note: The value of the cookie is automatically URLencoded when sending the cookie, and automatically
decoded when received (to prevent URLencoding, use setrawcookie() instead).
Example 2
You can also set the expiration time of the cookie in another way. It may be easier than using seconds.
<?php
$expire=time()+60*60*24*30;
setcookie("user", "Alex Porter", $expire);
?>
<html>
.....
In the example above the expiration time is set to a month (60 sec * 60 min * 24 hours * 30 days).
How to Retrieve a Cookie Value?
In the example below, we retrieve the value of the cookie named "user" and display it on a page:
<?php
// Print a cookie
echo $_COOKIE["user"];
// A way to view all cookies
print_r($_COOKIE);
?>
In the following example we use the isset() function to find out if a cookie has been set:
<html>
<body>
<?php
if (isset($_COOKIE["user"]))
echo "Welcome " . $_COOKIE["user"] . "!<br />";
else
echo "Welcome guest!<br />";
?>
</body>
</html>
When deleting a cookie you should assure that the expiration date is in the past.
Delete example:
<?php
// set the expiration date to one hour ago
setcookie("user", "", time()-3600);
?>
If your application deals with browsers that do not support cookies, you will have to use other methods to
pass information from one page to another in your application. One method is to pass the data through
forms (forms and user input are described earlier in this tutorial).
The form below passes the user input to "welcome.php" when the user clicks on the "Submit" button:
<html>
<body>
<form action="welcome.php" method="post">
Name: <input type="text" name="name" />
Age: <input type="text" name="age" />
<input type="submit" />
</form>
</body>
</html>
<html>
<body>
Welcome <?php echo $_POST["name"]; ?>.<br />
You are <?php echo $_POST["age"]; ?> years old.
</body>
</html>
PHP Sessions
1
A PHP session variable is used to store information about, or change settings for a user session.
Session variables hold information about one single user, and are available to all pages in one
application.
When you are working with an application, you open it, do some changes and then you close it. This is much
like a Session. The computer knows who you are. It knows when you start the application and when you
end. But on the internet there is one problem: the web server does not know who you are and what you do
because the HTTP address doesn't maintain state.
A PHP session solves this problem by allowing you to store user information on the server for later use (i.e.
username, shopping items, etc). However, session information is temporary and will be deleted after the
user has left the website. If you need a permanent storage you may want to store the data in a database.
Sessions work by creating a unique id (UID) for each visitor and store variables based on this UID. The UID
is either stored in a cookie or is propagated in the URL.
Before you can store user information in your PHP session, you must first start up the session.
Note: The session_start() function must appear BEFORE the <html> tag:
The code above will register the user's session with the server, allow you to start saving user information,
and assign a UID for that user's session.
The correct way to store and retrieve session variables is to use the PHP $_SESSION variable:
<?php
session_start();
// store session data
$_SESSION['views']=1;
?>
<html>
<body>
<?php
//retrieve session data
echo "Pageviews=". $_SESSION['views'];
?>
</body>
</html>
Output:
Pageviews=1
In the example below, we create a simple page-views counter. The isset() function checks if the "views"
variable has already been set. If "views" has been set, we can increment our counter. If "views" doesn't
exist, we create a "views" variable, and set it to 1:
<?php
session_start();
if(isset($_SESSION['views']))
$_SESSION['views']=$_SESSION['views']+1;
else
$_SESSION['views']=1;
echo "Views=". $_SESSION['views'];
?>
Destroying a Session
If you wish to delete some session data, you can use the unset() or the session_destroy() function.
<?php
unset($_SESSION['views']);
?>
You can also completely destroy the session by calling the session_destroy() function:
<?php
session_destroy();
?>
Note: session_destroy() will reset your session and you will lose all your stored session data.
PHP Sending Emails
1
The PHP mail() function is used to send emails from inside a script.
Syntax
mail(to,subject,message,headers,parameters)
Parameter Description
subject Required. Specifies the subject of the email. Note: This parameter cannot contain any
newline characters
message Required. Defines the message to be sent. Each line should be separated with a LF
(\n). Lines should not exceed 70 characters
headers Optional. Specifies additional headers, like From, Cc, and Bcc. The additional headers
should be separated with a CRLF (\r\n)
Note: For the mail functions to be available, PHP requires an installed and working email system. The
program to be used is defined by the configuration settings in the php.ini file. Read more in our PHP Mail
reference.
The simplest way to send an email with PHP is to send a text email.
In the example below we first declare the variables ($to, $subject, $message, $from, $headers), then we
use the variables in the mail() function to send an e-mail:
<?php
$to = "[email protected]";
$subject = "Test mail";
$message = "Hello! This is a simple email message.";
$from = "[email protected]";
$headers = "From: $from";
mail($to,$subject,$message,$headers);
echo "Mail Sent.";
?>
With PHP, you can create a feedback-form on your website. The example below sends a text message to a
specified e-mail address:
<html>
<body>
<?php
if (isset($_REQUEST['email']))
//if "email" is filled out, send email
{
//send email
$email = $_REQUEST['email'] ;
$subject = $_REQUEST['subject'] ;
$message = $_REQUEST['message'] ;
mail( "[email protected]", "Subject: $subject",
$message, "From: $email" );
echo "Thank you for using our mail form";
}
else
//if "email" is not filled out, display the form
{
echo "<form method='post' action='mailform.php'>
Email: <input name='email' type='text' /><br />
Subject: <input name='subject' type='text' /><br />
Message:<br />
<textarea name='message' rows='15' cols='40'>
</textarea><br />
<input type='submit' />
</form>";
}
?>
</body>
</html>
Note: This is the simplest way to send e-mail, but it is not secure. In the next chapter of this tutorial you
can read more about vulnerabilities in e-mail scripts, and how to validate user input to make it more secure.
For more information about the PHP mail() function, visit our PHP Mail Reference.
PHP Secure Emails
1
<html>
<body>
<?php
if (isset($_REQUEST['email']))
//if "email" is filled out, send email
{
//send email
$email = $_REQUEST['email'] ;
$subject = $_REQUEST['subject'] ;
$message = $_REQUEST['message'] ;
mail("[email protected]", "Subject: $subject",
$message, "From: $email" );
echo "Thank you for using our mail form";
}
else
//if "email" is not filled out, display the form
{
echo "<form method='post' action='mailform.php'>
Email: <input name='email' type='text' /><br />
Subject: <input name='subject' type='text' /><br />
Message:<br />
<textarea name='message' rows='15' cols='40'>
</textarea><br />
<input type='submit' />
</form>";
}
?>
</body>
</html>
The problem with the code above is that unauthorized users can insert data into the mail headers via the
input form.
What happens if the user adds the following text to the email input field in the form?
[email protected]%0ACc:[email protected]
%0ABcc:[email protected],[email protected],
[email protected],[email protected]
%0ABTo:[email protected]
The mail() function puts the text above into the mail headers as usual, and now the header has an extra
Cc:, Bcc:, and To: field. When the user clicks the submit button, the e-mail will be sent to all of the
addresses above!
The code below is the same as in the previous chapter, but now we have added an input validator that
checks the email field in the form:
<html>
<body>
<?php
function spamcheck($field)
{
//filter_var() sanitizes the e-mail
//address using FILTER_SANITIZE_EMAIL
$field=filter_var($field, FILTER_SANITIZE_EMAIL);
• The FILTER_SANITIZE_EMAIL filter removes all illegal e-mail characters from a string
• The FILTER_VALIDATE_EMAIL filter validates value as an e-mail address
You can read more about filters in our PHP Filter chapter.
1
PHP Secure Emails
1
<html>
<body>
<?php
if (isset($_REQUEST['email']))
//if "email" is filled out, send email
{
//send email
$email = $_REQUEST['email'] ;
$subject = $_REQUEST['subject'] ;
$message = $_REQUEST['message'] ;
mail("[email protected]", "Subject: $subject",
$message, "From: $email" );
echo "Thank you for using our mail form";
}
else
//if "email" is not filled out, display the form
{
echo "<form method='post' action='mailform.php'>
Email: <input name='email' type='text' /><br />
Subject: <input name='subject' type='text' /><br />
Message:<br />
<textarea name='message' rows='15' cols='40'>
</textarea><br />
<input type='submit' />
</form>";
}
?>
</body>
</html>
The problem with the code above is that unauthorized users can insert data into the mail headers via the
input form.
What happens if the user adds the following text to the email input field in the form?
[email protected]%0ACc:[email protected]
%0ABcc:[email protected],[email protected],
[email protected],[email protected]
%0ABTo:[email protected]
The mail() function puts the text above into the mail headers as usual, and now the header has an extra
Cc:, Bcc:, and To: field. When the user clicks the submit button, the e-mail will be sent to all of the
addresses above!
The code below is the same as in the previous chapter, but now we have added an input validator that
checks the email field in the form:
<html>
<body>
<?php
function spamcheck($field)
{
//filter_var() sanitizes the e-mail
//address using FILTER_SANITIZE_EMAIL
$field=filter_var($field, FILTER_SANITIZE_EMAIL);
• The FILTER_SANITIZE_EMAIL filter removes all illegal e-mail characters from a string
• The FILTER_VALIDATE_EMAIL filter validates value as an e-mail address
You can read more about filters in our PHP Filter chapter.
PHP Exception Handling
1
Exceptions are used to change the normal flow of a script if a specified error occurs
What is an Exception
With PHP 5 came a new object oriented way of dealing with errors.
Exception handling is used to change the normal flow of the code execution if a specified error (exceptional)
condition occurs. This condition is called an exception.
Note: Exceptions should only be used with error conditions, and should not be used to jump to another
place in the code at a specified point.
When an exception is thrown, the code following it will not be executed, and PHP will try to find the
matching "catch" block.
If an exception is not caught, a fatal error will be issued with an "Uncaught Exception" message.
<?php
//create function with an exception
function checkNum($number)
{
if($number>1)
{
throw new Exception("Value must be 1 or below");
}
return true;
}
//trigger exception
checkNum(2);
?>
To avoid the error from the example above, we need to create the proper code to handle an exception.
<?php
//create function with an exception
function checkNum($number)
{
if($number>1)
{
throw new Exception("Value must be 1 or below");
}
return true;
}
//catch exception
catch(Exception $e)
{
echo 'Message: ' .$e->getMessage();
}
?>
Example explained:
1. The checkNum() function is created. It checks if a number is greater than 1. If it is, an exception is
thrown
2. The checkNum() function is called in a "try" block
3. The exception within the checkNum() function is thrown
4. The "catch" block retrives the exception and creates an object ($e) containing the exception
information
5. The error message from the exception is echoed by calling $e->getMessage() from the exception
object
However, one way to get around the "every throw must have a catch" rule is to set a top level exception
handler to handle errors that slip through.
Creating a Custom Exception Class
Creating a custom exception handler is quite simple. We simply create a special class with functions that can
be called when an exception occurs in PHP. The class must be an extension of the exception class.
The custom exception class inherits the properties from PHP's exception class and you can add custom
functions to it.
<?php
class customException extends Exception
{
public function errorMessage()
{
//error message
$errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
.': <b>'.$this->getMessage().'</b> is not a valid E-Mail address';
return $errorMsg;
}
}
$email = "[email protected]";
try
{
//check if
if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
{
//throw exception if email is not valid
throw new customException($email);
}
}
catch (customException $e)
{
//display custom message
echo $e->errorMessage();
}
?>
The new class is a copy of the old exception class with an addition of the errorMessage() function. Since it is
a copy of the old class, and it inherits the properties and methods from the old class, we can use the
exception class methods like getLine() and getFile() and getMessage().
Example explained:
The code above throws an exception and catches it with a custom exception class:
1. The customException() class is created as an extension of the old exception class. This way it
inherits all methods and properties from the old exception class
2. The errorMessage() function is created. This function returns an error message if an e-mail address
is invalid
3. The $email variable is set to a string that is not a valid e-mail address
4. The "try" block is executed and an exception is thrown since the e-mail address is invalid
5. The "catch" block catches the exception and displays the error message
Multiple Exceptions
It is possible for a script to use multiple exceptions to check for multiple conditions.
It is possible to use several if..else blocks, a switch, or nest multiple exceptions. These exceptions can use
different exception classes and return different error messages:
<?php
class customException extends Exception
{
public function errorMessage()
{
//error message
$errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
.': <b>'.$this->getMessage().'</b> is not a valid E-Mail address';
return $errorMsg;
}
}
$email = "[email protected]";
try
{
//check if
if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
{
//throw exception if email is not valid
throw new customException($email);
}
//check for "example" in mail address
if(strpos($email, "example") !== FALSE)
{
throw new Exception("$email is an example e-mail");
}
}
Example explained:
The code above tests two conditions and throws an exception if any of the conditions are not met:
1. The customException() class is created as an extension of the old exception class. This way it
inherits all methods and properties from the old exception class
2. The errorMessage() function is created. This function returns an error message if an e-mail address
is invalid
3. The $email variable is set to a string that is a valid e-mail address, but contains the string
"example"
4. The "try" block is executed and an exception is not thrown on the first condition
5. The second condition triggers an exception since the e-mail contains the string "example"
6. The "catch" block catches the exception and displays the correct error message
If there was no customException catch, only the base exception catch, the exception would be handled there
Re-throwing Exceptions
Sometimes, when an exception is thrown, you may wish to handle it differently than the standard way. It is
possible to throw an exception a second time within a "catch" block.
A script should hide system errors from users. System errors may be important for the coder, but is of no
interest to the user. To make things easier for the user you can re-throw the exception with a user friendly
message:
<?php
class customException extends Exception
{
public function errorMessage()
{
//error message
$errorMsg = $this->getMessage().' is not a valid E-Mail address.';
return $errorMsg;
}
}
$email = "[email protected]";
try
{
try
{
//check for "example" in mail address
if(strpos($email, "example") !== FALSE)
{
//throw exception if email is not valid
throw new Exception($email);
}
}
catch(Exception $e)
{
//re-throw exception
throw new customException($email);
}
}
catch (customException $e)
{
//display custom message
echo $e->errorMessage();
}
?>
Example explained:
The code above tests if the email-address contains the string "example" in it, if it does, the exception is re-
thrown:
1. The customException() class is created as an extension of the old exception class. This way it
inherits all methods and properties from the old exception class
2. The errorMessage() function is created. This function returns an error message if an e-mail address
is invalid
3. The $email variable is set to a string that is a valid e-mail address, but contains the string
"example"
4. The "try" block contains another "try" block to make it possible to re-throw the exception
5. The exception is triggered since the e-mail contains the string "example"
6. The "catch" block catches the exception and re-throws a "customException"
7. The "customException" is caught and displays an error message
If the exception is not caught in its current "try" block, it will search for a catch block on "higher levels".
The set_exception_handler() function sets a user-defined function to handle all uncaught exceptions.
<?php
function myException($exception)
{
echo "<b>Exception:</b> " , $exception->getMessage();
}
set_exception_handler('myException');
throw new Exception('Uncaught Exception occurred');
?>
In the code above there was no "catch" block. Instead, the top level exception handler triggered. This
function should be used to catch uncaught exceptions.
1
PHP Filter
1
PHP filters are used to validate and filter data coming from insecure sources, like user input.
A PHP filter is used to validate and filter data coming from insecure sources.
To test, validate and filter user input or custom data is an important part of any web application.
The PHP filter extension is designed to make data filtering easier and quicker.
Almost all web applications depend on external input. Usually this comes from a user or another application
(like a web service). By using filters you can be sure your application gets the correct input type.
<?php
$int = 123;
if(!filter_var($int, FILTER_VALIDATE_INT))
{
echo("Integer is not valid");
}
else
{
echo("Integer is valid");
}
?>
The code above uses the "FILTER_VALIDATE_INT" filter to filter the variable. Since the integer is valid, the
output of the code above will be: "Integer is valid".
If we try with a variable that is not an integer (like "123abc"), the output will be: "Integer is not valid".
For a complete list of functions and filters, visit our PHP Filter Reference.
Validating filters:
Sanitizing filters:
Options and flags are used to add additional filtering options to the specified filters.
In the example below, we validate an integer using the filter_var() and the "min_range" and "max_range"
options:
<?php
$var=300;
$int_options = array(
"options"=>array
(
"min_range"=>0,
"max_range"=>256
)
);
if(!filter_var($var, FILTER_VALIDATE_INT, $int_options))
{
echo("Integer is not valid");
}
else
{
echo("Integer is valid");
}
?>
Like the code above, options must be put in an associative array with the name "options". If a flag is used it
does not need to be in an array.
Since the integer is "300" it is not in the specified range, and the output of the code above will be: "Integer
is not valid".
For a complete list of functions and filters, visit our PHP Filter Reference. Check each filter to see what
options and flags are available.
Validate Input
The first thing we need to do is to confirm that the input data we are looking for exists.
In the example below, the input variable "email" is sent to the PHP page:
<?php
if(!filter_has_var(INPUT_GET, "email"))
{
echo("Input type does not exist");
}
else
{
if (!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL))
{
echo "E-Mail is not valid";
}
else
{
echo "E-Mail is valid";
}
}
?>
Example Explained
The example above has an input (email) sent to it using the "GET" method:
1. Check if an "email" input variable of the "GET" type exist
2. If the input variable exists, check if it is a valid e-mail address
Sanitize Input
First we confirm that the input data we are looking for exists.
In the example below, the input variable "url" is sent to the PHP page:
<?php
if(!filter_has_var(INPUT_POST, "url"))
{
echo("Input type does not exist");
}
else
{
$url = filter_input(INPUT_POST,
"url", FILTER_SANITIZE_URL);
}
?>
Example Explained
The example above has an input (url) sent to it using the "POST" method:
If the input variable is a string like this "http://www.W3ååSchøøools.com/", the $url variable after the
sanitizing will look like this:
http://www.W3Schools.com/
A form almost always consist of more than one input field. To avoid calling the filter_var or filter_input
functions over and over, we can use the filter_var_array or the filter_input_array functions.
In this example we use the filter_input_array() function to filter three GET variables. The received GET
variables is a name, an age and an e-mail address:
<?php
$filters = array
(
"name" => array
(
"filter"=>FILTER_SANITIZE_STRING
),
"age" => array
(
"filter"=>FILTER_VALIDATE_INT,
"options"=>array
(
"min_range"=>1,
"max_range"=>120
)
),
"email"=> FILTER_VALIDATE_EMAIL,
);
$result = filter_input_array(INPUT_GET, $filters);
if (!$result["age"])
{
echo("Age must be a number between 1 and 120.<br />");
}
elseif(!$result["email"])
{
echo("E-Mail is not valid.<br />");
}
else
{
echo("User input is valid");
}
?>
Example Explained
The example above has three inputs (name, age and email) sent to it using the "GET" method:
1. Set an array containing the name of input variables and the filters used on the specified input
variables
2. Call the filter_input_array() function with the GET input variables and the array we just set
3. Check the "age" and "email" variables in the $result variable for invalid inputs. (If any of the input
variables are invalid, that input variable will be FALSE after the filter_input_array() function)
The second parameter of the filter_input_array() function can be an array or a single filter ID.
If the parameter is a single filter ID all values in the input array are filtered by the specified filter.
• Must be an associative array containing an input variable as an array key (like the "age" input
variable)
• The array value must be a filter ID or an array specifying the filter, flags and options
It is possible to call a user defined function and use it as a filter using the FILTER_CALLBACK filter. This way,
we have full control of the data filtering.
You can create your own user defined function or use an existing PHP function
The function you wish to use to filter is specified the same way as an option is specified. In an associative
array with the name "options"
In the example below, we use a user created function to convert all "_" to whitespaces:
<?php
function convertSpace($string)
{
return str_replace("_", " ", $string);
}
$string = "Peter_is_a_great_guy!";
The result from the code above should look like this:
Example Explained
PHP MySQL Introduction
2
What is MySQL?
MySQL is a database.
Databases are useful when storing information categorically. A company may have a database with the
following tables: "Employees", "Products", "Customers" and "Orders".
Database Tables
A database most often contains one or more tables. Each table is identified by a name (e.g. "Customers" or
"Orders"). Tables contain records (rows) with data.
The table above contains three records (one for each person) and four columns (LastName, FirstName,
Address, and City).
Queries
With MySQL, we can query a database for specific information and have a recordset returned.
The query above selects all the data in the "LastName" column from the "Persons" table, and will return a
recordset like this:
LastName
Hansen
Svendson
Pettersen
Download MySQL Database
If you don't have a PHP server with a MySQL Database, you can download MySQL for free here:
http://www.mysql.com/downloads/index.html
One great thing about MySQL is that it can be scaled down to support embedded database applications.
Perhaps it is because of this reputation that many people believe that MySQL can only handle small to
medium-sized systems.
The truth is that MySQL is the de-facto standard database for web sites that support huge volumes of both
data and end users (like Friendster, Yahoo, Google).
PHP MySQL Connect to a Database
2
Before you can access data in a database, you must create a connection to the database.
Syntax
mysql_connect(servername,username,password);
Parameter Description
servername Optional. Specifies the server to connect to. Default value is "localhost:3306"
username Optional. Specifies the username to log in with. Default value is the name of the user
that owns the server process
Note: There are more available parameters, but the ones listed above are the most important. Visit our full
PHP MySQL Reference for more details.
Example
In the following example we store the connection in a variable ($con) for later use in the script. The "die"
part will be executed if the connection fails:
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
// some code
?>
Closing a Connection
The connection will be closed automatically when the script ends. To close the connection before, use the
mysql_close() function:
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
// some code
mysql_close($con);
?>
PHP MySQL Create Database and Tables
2
Syntax
CREATE DATABASE database_name
To get PHP to execute the statement above we must use the mysql_query() function. This function is used
to send a query or command to a MySQL connection.
Example
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
if (mysql_query("CREATE DATABASE my_db",$con))
{
echo "Database created";
}
else
{
echo "Error creating database: " . mysql_error();
}
mysql_close($con);
?>
Create a Table
Syntax
CREATE TABLE table_name
(
column_name1 data_type,
column_name2 data_type,
column_name3 data_type,
....
)
We must add the CREATE TABLE statement to the mysql_query() function to execute the command.
Example
The following example creates a table named "Persons", with three columns. The column names will be
"FirstName", "LastName" and "Age":
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
// Create database
if (mysql_query("CREATE DATABASE my_db",$con))
{
echo "Database created";
}
else
{
echo "Error creating database: " . mysql_error();
}
// Create table
mysql_select_db("my_db", $con);
$sql = "CREATE TABLE Persons
(
FirstName varchar(15),
LastName varchar(15),
Age int
)";
// Execute query
mysql_query($sql,$con);
mysql_close($con);
?>
Important: A database must be selected before a table can be created. The database is selected with the
mysql_select_db() function.
Note: When you create a database field of type varchar, you must specify the maximum length of the field,
e.g. varchar(15).
The data type specifies what type of data the column can hold. For a complete reference of all the data
types available in MySQL, go to our complete Data Types reference.
A primary key is used to uniquely identify the rows in a table. Each primary key value must be unique within
the table. Furthermore, the primary key field cannot be null because the database engine requires a value to
locate the record.
The following example sets the personID field as the primary key field. The primary key field is often an ID
number, and is often used with the AUTO_INCREMENT setting. AUTO_INCREMENT automatically increases
the value of the field by 1 each time a new record is added. To ensure that the primary key field cannot be
null, we must add the NOT NULL setting to the field.
Example
$sql = "CREATE TABLE Persons
(
personID int NOT NULL AUTO_INCREMENT,
PRIMARY KEY(personID),
FirstName varchar(15),
LastName varchar(15),
Age int
)";
mysql_query($sql,$con);
PHP MySQL Insert Into
2
The INSERT INTO statement is used to add new records to a database table.
Syntax
The first form doesn't specify the column names where the data will be inserted, only their values:
The second form specifies both the column names and the values to be inserted:
Example
In the previous chapter we created a table named "Persons", with three columns; "Firstname", "Lastname"
and "Age". We will use the same table in this example. The following example adds two new records to the
"Persons" table:
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
mysql_query("INSERT INTO Persons (FirstName, LastName, Age)
VALUES ('Peter', 'Griffin', '35')");
mysql_query("INSERT INTO Persons (FirstName, LastName, Age)
VALUES ('Glenn', 'Quagmire', '33')");
mysql_close($con);
?>
Now we will create an HTML form that can be used to add new records to the "Persons" table.
<html>
<body>
<form action="insert.php" method="post">
Firstname: <input type="text" name="firstname" />
Lastname: <input type="text" name="lastname" />
Age: <input type="text" name="age" />
<input type="submit" />
</form>
</body>
</html>
When a user clicks the submit button in the HTML form in the example above, the form data is sent to
"insert.php".
The "insert.php" file connects to a database, and retrieves the values from the form with the PHP $_POST
variables.
Then, the mysql_query() function executes the INSERT INTO statement, and a new record will be added to
the "Persons" table.
PHP MySQL Select
2
Syntax
SELECT column_name(s)
FROM table_name
To get PHP to execute the statement above we must use the mysql_query() function. This function is used
to send a query or command to a MySQL connection.
Example
The following example selects all the data stored in the "Persons" table (The * character selects all the data
in the table):
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
$result = mysql_query("SELECT * FROM Persons");
while($row = mysql_fetch_array($result))
{
echo $row['FirstName'] . " " . $row['LastName'];
echo "<br />";
}
mysql_close($con);
?>
The example above stores the data returned by the mysql_query() function in the $result variable.
Next, we use the mysql_fetch_array() function to return the first row from the recordset as an array. Each
call to mysql_fetch_array() returns the next row in the recordset. The while loop loops through all the
records in the recordset. To print the value of each row, we use the PHP $row variable ($row['FirstName']
and $row['LastName']).
Peter Griffin
Glenn Quagmire
The following example selects the same data as the example above, but will display the data in an HTML
table:
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
Firstname Lastname
Glenn Quagmire
Peter Griffin
2
PHP MySQL The Where Clause
2
The WHERE clause is used to extract only those records that fulfill a specified criterion.
Syntax
SELECT column_name(s)
FROM table_name
WHERE column_name operator value
To get PHP to execute the statement above we must use the mysql_query() function. This function is used
to send a query or command to a MySQL connection.
Example
The following example selects all rows from the "Persons" table where "FirstName='Peter':
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
while($row = mysql_fetch_array($result))
{
echo $row['FirstName'] . " " . $row['LastName'];
echo "<br />";
}
?>
PHP MySQL The Where Clause
2
The WHERE clause is used to extract only those records that fulfill a specified criterion.
Syntax
SELECT column_name(s)
FROM table_name
WHERE column_name operator value
To get PHP to execute the statement above we must use the mysql_query() function. This function is used
to send a query or command to a MySQL connection.
Example
The following example selects all rows from the "Persons" table where "FirstName='Peter':
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
while($row = mysql_fetch_array($result))
{
echo $row['FirstName'] . " " . $row['LastName'];
echo "<br />";
}
?>
Peter Griffin
PHP MySQL Update
2
Syntax
UPDATE table_name
SET column1=value, column2=value2,...
WHERE some_column=some_value
Note: Notice the WHERE clause in the UPDATE syntax. The WHERE clause specifies which record or records
that should be updated. If you omit the WHERE clause, all records will be updated!
To get PHP to execute the statement above we must use the mysql_query() function. This function is used
to send a query or command to a MySQL connection.
Example
Earlier in the tutorial we created a table named "Persons". Here is how it looks:
Glenn Quagmire 33
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
After the update, the "Persons" table will look like this:
Peter Griffin 36
Glenn Quagmire 33
PHP MySQL Delete
2
The DELETE FROM statement is used to delete records from a database table.
Syntax
DELETE FROM table_name
WHERE some_column = some_value
Note: Notice the WHERE clause in the DELETE syntax. The WHERE clause specifies which record or records
that should be deleted. If you omit the WHERE clause, all records will be deleted!
To get PHP to execute the statement above we must use the mysql_query() function. This function is used
to send a query or command to a MySQL connection.
Example
Peter Griffin 35
Glenn Quagmire 33
The following example deletes all the records in the "Persons" table where LastName='Griffin':
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
Glenn Quagmire 33
PHP Database ODBC
2
ODBC is an Application Programming Interface (API) that allows you to connect to a data source
(e.g. an MS Access database).
With an ODBC connection, you can connect to any database, on any computer in your network, as long as
an ODBC connection is available.
Note that this configuration has to be done on the computer where your web site is located. If you are
running Internet Information Server (IIS) on your own computer, the instructions above will work, but if
your web site is located on a remote server, you have to have physical access to that server, or ask your
web host to to set up a DSN for you to use.
Connecting to an ODBC
The odbc_connect() function is used to connect to an ODBC data source. The function takes four
parameters: the data source name, username, password, and an optional cursor type.
Example
The following example creates a connection to a DSN called northwind, with no username and no password.
It then creates an SQL and executes it:
$conn=odbc_connect('northwind','','');
$sql="SELECT * FROM customers";
$rs=odbc_exec($conn,$sql);
Retrieving Records
The odbc_fetch_row() function is used to return records from the result-set. This function returns true if it is
able to return rows, otherwise false.
The function takes two parameters: the ODBC result identifier and an optional row number:
odbc_fetch_row($rs)
The odbc_result() function is used to read fields from a record. This function takes two parameters: the
ODBC result identifier and a field number or name.
The code line below returns the value of the first field from the record:
$compname=odbc_result($rs,1);
The code line below returns the value of a field called "CompanyName":
$compname=odbc_result($rs,"CompanyName");
odbc_close($conn);
An ODBC Example
The following example shows how to first create a database connection, then a result-set, and then display
the data in an HTML table.
<html>
<body>
<?php
$conn=odbc_connect('northwind','','');
if (!$conn)
{exit("Connection Failed: " . $conn);}
$sql="SELECT * FROM customers";
$rs=odbc_exec($conn,$sql);
if (!$rs)
{exit("Error in SQL");}
echo "<table><tr>";
echo "<th>Companyname</th>";
echo "<th>Contactname</th></tr>";
while (odbc_fetch_row($rs))
{
$compname=odbc_result($rs,"CompanyName");
$conname=odbc_result($rs,"ContactName");
echo "<tr><td>$compname</td>";
echo "<td>$conname</td></tr>";
}
odbc_close($conn);
echo "</table>";
?>
</body>
</html>
NEXT TUTORIAIS
PHP XML
XML Expat Parser
XML DOM
XML SimpleXML
PHP Reference
PHP Array
PHP Calendar
PHP Date
PHP Directory
PHP Error
PHP Filesystem
PHP Filter
PHP FTP
PHP HTTP
PHP Libxml
PHP Mail
PHP Math
PHP Misc
PHP MySQL
PHP SimpleXML
PHP String
PHP XML
PHP Zip
PHP Quiz
PHP Quiz
PHP Exam