Using PDO in PHP
Introduction to PDO
PDO (PHP Data Objects) is a consistent way to access databases in PHP. It supports multiple databases such as MySQL, PostgreSQL, SQLite, and more. PDO provides a data-access abstraction layer, which means you can use the same functions to issue queries and fetch data regardless of the database you're using.
Connecting to a Database
To connect to a database using PDO, you need to create a new PDO instance. The constructor of the PDO class requires three arguments: the Data Source Name (DSN), the username, and the password.
<?php
$dsn = 'mysql:host=localhost;dbname=testdb';
$username = 'root';
$password = 'password';
try {
$dbh = new PDO($dsn, $username, $password);
echo 'Connection successful';
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
?>
Connection successful
Executing Queries
You can execute SQL queries using the exec() method for INSERT, UPDATE, and DELETE statements, or the query() method for SELECT statements.
INSERT Example
<?php
$sql = "INSERT INTO users (username, email) VALUES ('john_doe', 'john@example.com')";
$count = $dbh->exec($sql);
echo $count . ' rows inserted';
?>
1 rows inserted
SELECT Example
<?php
$sql = 'SELECT * FROM users';
foreach ($dbh->query($sql) as $row) {
print $row['username'] . "\t";
print $row['email'] . "\n";
}
?>
john_doe john@example.com
Prepared Statements
Prepared statements are a way to execute the same SQL query repeatedly with different parameters. They help protect against SQL injection attacks.
Using Prepared Statements
<?php
$sql = 'INSERT INTO users (username, email) VALUES (:username, :email)';
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':username', $username);
$stmt->bindParam(':email', $email);
$username = 'jane_doe';
$email = 'jane@example.com';
$stmt->execute();
$username = 'mark_smith';
$email = 'mark@example.com';
$stmt->execute();
?>
Error Handling
PDO offers several error handling modes. The default mode is to ignore errors. You can change the error mode using the setAttribute() method.
<?php
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
?>
With this mode, an exception will be thrown if an error occurs.
Closing the Connection
To close the connection, simply set the PDO instance to null.
<?php
$dbh = null;
?>
