Content · Web Development · PHP

PHP PDO::setAttribute() Method: Usage and Examples

Sets a connection option such as the default fetch mode or error reporting mode. Options vary by driver and should be set before executing dependent

1 views Published Oct 17, 2026 Updated Oct 17, 2026 admin

Sets a connection option such as the default fetch mode or error reporting mode.

The objective is to understand the behavior and operational limits, not only the method name.

What It Does


Sets a connection option such as the default fetch mode or error reporting mode.

Syntax and Return Value


PDO::setAttribute(Parameter #0 [ <required> int $attribute ], Parameter #1 [ <required> mixed $value ]): mixed

The return value and exceptional cases depend on the call described here: Options vary by driver and should be set before executing dependent queries.

Example 1: Basic Use


This self-contained SQLite example uses in-memory demo data; it requires the pdo_sqlite driver.

<?php
$pdo = new PDO('sqlite::memory:', null, null, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
$pdo->exec('CREATE TABLE products (id INTEGER PRIMARY KEY, name TEXT NOT NULL, price INTEGER NOT NULL, active INTEGER)');
$pdo->exec("INSERT INTO products (id,name,price,active) VALUES (1,'Desk',120,1),(2,'Lamp',35,1),(3,'Chair',85,0)");
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
echo json_encode($pdo->query("SELECT name FROM products LIMIT 1")->fetch());

Example 2: A Second Scenario


This self-contained SQLite example uses in-memory demo data; it requires the pdo_sqlite driver. This additional check distinguishes the method's result from connection or statement state.

<?php
$pdo = new PDO('sqlite::memory:', null, null, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
$pdo->exec('CREATE TABLE products (id INTEGER PRIMARY KEY, name TEXT NOT NULL, price INTEGER NOT NULL, active INTEGER)');
$pdo->exec("INSERT INTO products (id,name,price,active) VALUES (1,'Desk',120,1),(2,'Lamp',35,1),(3,'Chair',85,0)");
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
echo json_encode($pdo->query("SELECT name FROM products LIMIT 1")->fetch());
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_NUM);
echo $pdo->getAttribute(PDO::ATTR_DEFAULT_FETCH_MODE);

Example 3: Practical Checks


This self-contained SQLite example uses in-memory demo data; it requires the pdo_sqlite driver. This additional check distinguishes the method's result from connection or statement state.

<?php
$pdo = new PDO('sqlite::memory:', null, null, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
$pdo->exec('CREATE TABLE products (id INTEGER PRIMARY KEY, name TEXT NOT NULL, price INTEGER NOT NULL, active INTEGER)');
$pdo->exec("INSERT INTO products (id,name,price,active) VALUES (1,'Desk',120,1),(2,'Lamp',35,1),(3,'Chair',85,0)");
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
echo json_encode($pdo->query("SELECT name FROM products LIMIT 1")->fetch());
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
echo get_debug_type($pdo->query("SELECT name FROM products LIMIT 1")->fetch());

Important Behavior and Edge Cases


Options vary by driver and should be set before executing dependent queries.

For production use, also account for error handling, data validation, resource limits and environment-specific driver behavior.

Comparison with Related Approaches


ApproachImportant distinction
PDO::setAttributeSets a connection option such as the default fetch mode or error reporting mode.
Related API / patterngetAttribute reads a supported connection option.

Common Beginner Mistakes


MistakeCorrect approach
Assuming the happy path covers edge casesOptions vary by driver and should be set before executing dependent queries.
Using a related API interchangeablygetAttribute reads a supported connection option.

Key Takeaways


  • Sets a connection option such as the default fetch mode or error reporting mode.
  • Options vary by driver and should be set before executing dependent queries.
  • getAttribute reads a supported connection option.

Choose this API or pattern when its exact semantics match your task, and verify the result against the database driver and runtime used by your application.

Share this resourceSend this page to someone who may find it useful.