Summary: in this tutorial, you will learn how to query data from SQLite tables using PHP PDO.
This tutorial begins where the “Insert data into a table in PHP” tutorial left off.
To query data from a table in PHP using PDO, you follow these steps:
Step 1. Connect to the SQLite database:
$pdo = new \PDO($dsn);Code language: PHP (php)Step 2. Execute a SELECT statement using the query() method of the PDO object:
$rows = $pdo->query($sql);Code language: PHP (php)The query() method returns a result set as a PDOStatement object.
If you want to pass values to the SELECT statement, you can:
- Create the
PDOStatementobject by calling theprepare()method of thePDOobject. - Bind values using the
bindValue()method of thePDOStatementobject. - Call the
execute()method to execute theSELECTstatement.
Here’s the code to do these three steps:
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':id',$id);
$stmt->execute();Code language: PHP (php)Alternatively, you can pass values to the execute() method directly:
$stmt = $pdo->prepare($sql);
$stmt->execute([
':id' => id
]);Code language: PHP (php)Step 3. Fetch rows from the result set using the fetch() method of the PDOStatement object and process each row individually:
while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
// process each row in the result set
}Code language: PHP (php)If you are interested in various fetch modes, check out the Fetching Data section on the PHP tutorial website.
Querying all rows from a table
Step 1. Create a new file called query.php within the project directory.
Step 2. Define the get_projects() function that retrieves all rows from the projects table:
<?php
require_once 'config.php';
function get_projects($pdo) {
$stmt = $pdo->query('SELECT project_id, project_name FROM projects');
$projects = [];
while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
$projects[] = [
'project_id' => $row['project_id'],
'project_name' => $row['project_name']
];
}
return $projects;
}
$dsn = "sqlite:$db";
try {
$pdo = new \PDO($dsn);
// get all projects
$projects = get_projects($pdo);
var_dump($projects);
} catch(\PDOException $e) {
echo $e->getMessage();
}Code language: PHP (php)How it works.
First, load the configuration from the config.php file:
require_once 'config.php';Code language: PHP (php)The config.php stores the path to the SQLite database file:
<?php
$db = './database/my.db';Code language: PHP (php)Second, define the get_projects() function that retrieves all rows from the projects table:
function get_projects($pdo) {
$stmt = $pdo->query('SELECT project_id, project_name FROM projects');
$projects = [];
while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
$projects[] = [
'project_id' => $row['project_id'],
'project_name' => $row['project_name']
];
}
return $projects;
}Code language: PHP (php)Third, construct the data source name (dsn) for connecting to the SQLite database:
$dsn = "sqlite:$db";Code language: PHP (php)Fourth, open a database connection:
$pdo = new \PDO($dsn);Code language: PHP (php)Fifth, call the get_projects function to retrieve all rows from the projects table and dump the result set:
$projects = get_projects($pdo);
var_dump($projects);Code language: PHP (php)Finally, display an error message if an error occurs while opening the database connection or querying data:
} catch(\PDOException $e) {
echo $e->getMessage();
}Code language: PHP (php)Step 3. Run the query.php in the web browser.
You’ll see the following output:
array (size=2)
0 =>
array (size=2)
'project_id' => int 1
'project_name' => string 'PHP SQLite Demo' (length=15)
1 =>
array (size=2)
'project_id' => int 2
'project_name' => string 'Mastering SQLite' (length=16)Code language: PHP (php)Finding tasks for a project
Step 1. Define a new function get_tasks_by_project() that retrieves all tasks of a project specified by a project id, in the query.php file:
function get_tasks_by_project($pdo, $projectId) {
$sql = 'SELECT * FROM tasks
WHERE project_id = :project_id';
$stmt = $pdo->prepare($sql);
$stmt->execute([':project_id' => $projectId]);
$tasks = [];
while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
$tasks[] = [
'task_id' => $row['task_id'],
'task_name' => $row['task_name'],
'start_date' => $row['start_date'],
'completed_date' => $row['completed_date'],
'completed' => $row['completed'],
'project_id' => $row['project_id'],
];
}
return $tasks;
}Code language: PHP (php)Step 2. Call the get_tasks_by_project() function to get all tasks of the project with id 1:
$tasks = get_tasks_by_project($pdo, 1);
var_dump($tasks);Code language: PHP (php)Step 3. Run the query.php in the web browser.
It’ll show three tasks of the project id 1:
array (size=3)
0 =>
array (size=6)
'task_id' => int 1
'task_name' => string 'Prepare the sample database schema' (length=34)
'start_date' => string '2016-06-01' (length=10)
'completed_date' => string '2016-06-01' (length=10)
'completed' => int 1
'project_id' => string '1' (length=1)
1 =>
array (size=6)
'task_id' => int 2
'task_name' => string 'Create new tables ' (length=18)
'start_date' => string '2016-05-01' (length=10)
'completed_date' => string '2016-05-02' (length=10)
'completed' => int 1
'project_id' => string '1' (length=1)
2 =>
array (size=6)
'task_id' => int 3
'task_name' => string 'Insert some sample data' (length=23)
'start_date' => string '2016-05-01' (length=10)
'completed_date' => string '2016-06-02' (length=10)
'completed' => int 1
'project_id' => string '1' (length=1)Code language: PHP (php)Here’s the complete query.php code:
<?php
require_once 'config.php';
function get_projects($pdo) {
$stmt = $pdo->query('SELECT project_id, project_name FROM projects');
$projects = [];
while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
$projects[] = [
'project_id' => $row['project_id'],
'project_name' => $row['project_name']
];
}
return $projects;
}
function get_tasks_by_project($pdo, $projectId) {
$sql = 'SELECT * FROM tasks
WHERE project_id = :project_id';
$stmt = $pdo->prepare($sql);
$stmt->execute([':project_id' => $projectId]);
$tasks = [];
while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
$tasks[] = [
'task_id' => $row['task_id'],
'task_name' => $row['task_name'],
'start_date' => $row['start_date'],
'completed_date' => $row['completed_date'],
'completed' => $row['completed'],
'project_id' => $row['project_id'],
];
}
return $tasks;
}
$dsn = "sqlite:$db";
try {
$pdo = new \PDO($dsn);
// get all projects
$projects = get_projects($pdo);
var_dump($projects);
// get tasks by project
$tasks = get_tasks_by_project($pdo, 1);
var_dump($tasks);
} catch(\PDOException $e) {
echo $e->getMessage();
}Code language: PHP (php)Summary
- Call the
query()method of thePDOobject to execute aSELECTstatement to retrieve data from tables. - Use a prepared statement (
PDOStatement) to execute aSELECTstatement with values to retrieve data from tables.