PDO Connection Basics and Examples using PHP

Here are some PDO connection method basics with examples.

You will often commonly see the connection method being referred to as $dbh and $sth. These simply stand for "database handler" and "statement handler".

Connecting to MySQL with PDO Object

//inc-db-connect.php
 
define('DATABASE','database_name_here');
define('DATABASE_USER','database_user_here');
define('DATABASE_PASSWORD','database_password_here');
 
try {
  $dbh = new PDO('mysql:host=localhost;dbname='.DATABASE, DATABASE_USER, DATABASE_PASSWORD,array(
    PDO::ATTR_PERSISTENT => true,
  ));
} catch (PDOException $e) {
  print "Error!: " . $e->getMessage() . "<br/>";
  die();
}

Connecting to the Database from within a Function

include('inc-db-connect.php');
 
function someFunction() {
 
  global $dbh;
 
  $sth = $dbh->query('SELECT * FROM table');
 
}

Passing Parameters to the $dbh Object
By default the PDO execute() function treats all PARAMS passed as STRING VALUES unless defined using bindParam().

//PASSING ONLY STRING VALUES:
//(using named parameters)
 
$sth = $dbh->prepare('SELECT * FROM table WHERE name = :username && password = :pass');
$sth->execute(array(':username' => $username, ':pass' => $password));
 
//OR
//(using named placeholders)
//$values must be ordered respectively
 
$values = array();
$values[] = $username;
$values[] = $password;
 
$sth = $dbh->prepare('SELECT * FROM table WHERE name = ? && password = ?');
$sth->execute($values);
 
//PASSING MIXED VALUES:
//(using named parameters)
 
$sth = $dbh->prepare('SELECT * FROM table WHERE name = :username && user_id = :id');
$sth->bindParam(':username', $username, PDO::PARAM_STR);
$sth->bindParam(':id', $user_id, PDO::PARAM_INT);
$sth->execute();
 
//OR
//(using named placeholders)
 
$sth = $dbh->prepare('SELECT * FROM table WHERE name = ? && user_id = ?');
$sth->bindParam(1, $username, PDO::PARAM_STR);
$sth->bindParam(2, $user_id, PDO::PARAM_INT);
$sth->execute();

Returning Values from an executed PDO Query

//FETCHING ONLY ONE RECORD:
 
$sth = $dbh->prepare('SELECT db_field FROM table WHERE user_id = :id');
$sth->bindParam(':id', $user_id, PDO::PARAM_INT);
$sth->execute();
$user = $sth->fetch();
 
//display an error if one occured
$error = $sth->errorInfo();
if ($error[1]) print_r($error);
 
echo $user['db_field'];
 
//FETCHING MANY RECORDS:
 
$sth = $dbh->prepare('SELECT * FROM users_table WHERE company_id = :id');
$sth->bindParam(':id', $company_id, PDO::PARAM_INT);
$sth->execute();
$users = $sth->fetchAll();
 
//display an error if one occured
$error = $sth->errorInfo();
if ($error[1]) print_r($error);
 
foreach($users as $row => $field) :
 
  //$row = the current record
  //$field = an array of DB fields for the current record
 
  echo $field['user_id'];  //the current records user_id
  echo $field['username']; //the current records username, etc...
 
endforeach;

Returning the Total Rows for PDO Query

$sth = $dbh->prepare('SELECT * FROM users_table WHERE company_id = :id');
$sth->bindParam(':id', $company_id, PDO::PARAM_INT);
$sth->execute();
$ttl_Users = $sth->rowCount();

Return Last Inserted ID with PDO

$sth = $dbh->prepare('INSERT INTO table (username) VALUES (:username)');
$sth->execute(array(':username' => $username));
$user_id = $dbh->lastInsertId();