MySQL & Perl DBI

In the first chapter of the MySQL Perl tutorial, we will introduce the Perl DBI module and the MySQL database. We will provide some definitions and show how to install the necessary elements.


To work with this tutorial, we must have Perl language, MySQL database, Perl DBI and DBD::MySQL modules installed. The DBI is the standard Perl database interface. Each database has its driver. In our case, DBD::mysql is the driver for the MySQL database.

$ sudo perl -MCPAN -e shell
cpan> install DBI
cpan[2]> install DBD::mysql

The above commands show, how to install Perl DBI and DBD::mysql modules.

MySQL database

MySQL is a leading open source database management system. It is a multi user, multithreaded database management system. MySQL is especially popular on the web. It is one part of the very popular LAMP platform consisting of Linux, Apache, MySQL, and PHP. Currently MySQL is owned by Oracle. MySQL database is available on most important OS platforms. It runs on BSD Unix, Linux, Window,s or Mac OS. Wikipedia and YouTube use MySQL. These sites manage millions of queries each day. MySQL comes in two versions: MySQL server system and MySQL embedded system.

The MySQL comes with the mysql command line utility. It can be used to issue SQL commands against a database. Now we are going to use the mysql command line tool to create a new database.

$ sudo apt-get install mysql-server

This command installs the MySQL server and various other packages. While installing the package, we are prompted to enter a password for the MySQL root account. For installing MySQL from sources, have a look at MySQL installation page.

$ service mysql status
mysql start/running, process 1238

We check if the MySQL server is running. If not, we need to start the server.

$ sudo service mysql start

The above command is a common way to start MySQL if we have installed the MySQL database from packages.

$ sudo -b /usr/local/mysql/bin/mysqld_safe

The above command starts MySQL server using the MySQL server startup script. The way how we start a MySQL server might be different. It depends whether we have installed MySQL from sources or from packages and also on the Linux distro. For further information consult MySQL first steps or your Linux distro information.

Next, we are going to create a new database user and a new database. We use the mysql client.

$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 30
Server version: 5.0.67-0ubuntu6 (Ubuntu)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

| Database           |
| information_schema | 
| mysql              | 
2 rows in set (0.00 sec)

We use the mysql monitor client application to connect to the server. We connect to the database using the root account. We show all available databases with the SHOW DATABASES statement.

mysql> CREATE DATABASE mydb;
Query OK, 1 row affected (0.02 sec)

We create a new mydb database. We will use this database throughout the tutorial.

mysql> CREATE USER user12@localhost IDENTIFIED BY '34klq*';
Query OK, 0 rows affected (0.00 sec)

mysql> USE mydb;
Database changed

mysql> GRANT ALL ON mydb.* to user12@localhost;
Query OK, 0 rows affected (0.00 sec)

mysql> quit;

We create a new database user. We grant all privileges to this user for all tables of the mydb database.

Perl DBI

The Perl DBI (Database Interface) is a database access module for the Perl programming language. It defines a set of methods, variables and conventions that provide a standard database interface. The DBI is also responsible for the dynamic loading of drivers, error checking and handling, providing default implementations for methods, and many other non-database specific duties. The DBI dispatches method calls to the appropriate database driver. The DBD (Database Driver) is a Perl module which translates the DBI methods for a specific database engine. The database drivers are supplied by database vendors.


use strict;
use DBI;

my @ary = DBI->available_drivers();
print join("\n", @ary), "\n";

The code example lists all available drivers on our system.

use DBI;

We import the DBI module for our script.

my @ary = DBI->available_drivers();

The available_drivers() class method gets all the current available drivers on our system.

print join("\n", @ary), "\n";

This line prints the drivers to the console, each on a separate line.

$ ./available_drivers.pl 

Example output.

Common DBI methods

The following table lists some common DBI methods.

Method nameDescription
available_drivers()Returns a list of all available drivers
connect()Establishes a connection to the requested data source
disconnect()Disconnects from the database server
prepare()Prepares an SQL statement for execution
execute()Executes the prepared statement
do()Prepares and executes an SQL statement
bind_param()Associates a value with a placeholder in a prepared statement
bind_col()Binds a Perl variable to an output field of a SELECT statement
begin_work()Starts a new transaction
commit()Writes the most recent series of uncommitted database changes to the database
rollback()Undoes the most recent series of uncommitted database changes
quote()Quotes a string literal for use as a literal value in an SQL statement
dump_results()Fetches all the rows and prints them
fetchrow_array()Fetches the next row as an array of fields
fetchrow_arrayref()Fetches the next row as a reference array of fields
fetchrow_hashref()Fetches the next row as a reference to a hashtable
fetchall_arrayref()Fetches all data as an array of arrays
finish()Finishes a statement and lets the system free resources
rows()Returns the number of rows affected
column_info()Provides information about columns
table_info()Provides information about tables
primary_key_info()Provides information about primary keys in tables
foreign_key_info()Provides information about foreign keys in tables


Perl programmers usually use the following variable names when working with Perl DBI. In this tutorial we will adhere to these conventions too.

Variable nameDescription
$dbhDatabase handle object
$sthStatement handle object
$drhDriver handle object (rarely seen or used in applications)
$hAny of the handle types above ($dbh, $sth, or $drh)
$rcGeneral Return Code (boolean: true=ok, false=error)
$rvGeneral Return Value (typically an integer)
@aryList of values returned from the database, typically a row of data
$rowsNumber of rows processed (if available, else -1)
$fhA filehandle
undefNULL values are represented by undefined values in Perl
\%attrReference to a hash of attribute values passed to methods

This chapter of the MySQL Perl tutorial was an introduction to the Perl DBI module and the MySQL database.