Challenge - 5 Problems
PDO Exception Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate2:00remaining
What is the output when a PDO exception occurs?
Consider the following PHP code that tries to connect to a database with wrong credentials. What will be the output?
PHP
<?php try { $pdo = new PDO('mysql:host=localhost;dbname=testdb', 'wronguser', 'wrongpass'); echo "Connected successfully"; } catch (PDOException $e) { echo "Connection failed: " . $e->getMessage(); } ?>
Attempts:
2 left
💡 Hint
Think about what happens when the connection fails and how exceptions are caught.
✗ Incorrect
The PDO constructor throws a PDOException when connection fails. The catch block catches it and prints the message with 'Connection failed: '.
❓ Predict Output
intermediate2:00remaining
What error is raised when accessing a non-existent PDO attribute?
What error will the following PHP code produce?
PHP
<?php $pdo = new PDO('sqlite::memory:'); echo $pdo->getAttribute(PDO::ATTR_NON_EXISTENT); ?>
Attempts:
2 left
💡 Hint
Check if the constant exists in the PDO class.
✗ Incorrect
The constant PDO::ATTR_NON_EXISTENT does not exist, so PHP throws a fatal error for undefined class constant.
🔧 Debug
advanced2:00remaining
Why does this PDO exception not get caught?
Examine the code below. Why does the exception not get caught by the catch block?
PHP
<?php try { $pdo = new PDO('mysql:host=localhost;dbname=testdb', 'wronguser', 'wrongpass'); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->query('INVALID SQL'); } catch (PDOException $e) { echo "Error caught: " . $e->getMessage(); } ?>
Attempts:
2 left
💡 Hint
Think about when the error mode is set and when exceptions are thrown.
✗ Incorrect
The PDO connection fails first but the error mode is set only after connection. The connection error throws an exception before error mode is set, so it is caught. But the invalid query error mode is set after connection, so query() throws a warning, not exception.
❓ Predict Output
advanced2:00remaining
What is the output of this PDO exception handling code?
What will this PHP code output?
PHP
<?php try { $pdo = new PDO('sqlite::memory:'); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->exec('CREATE TABLE test(id INTEGER PRIMARY KEY)'); $pdo->exec('INSERT INTO test(id) VALUES(1)'); $pdo->exec('INSERT INTO test(id) VALUES(1)'); echo "Insert succeeded"; } catch (PDOException $e) { echo "Insert failed: " . $e->getMessage(); } ?>
Attempts:
2 left
💡 Hint
Think about what happens when you insert a duplicate primary key with exceptions enabled.
✗ Incorrect
The second insert violates the UNIQUE constraint on the primary key. Because error mode is set to throw exceptions, the exception is caught and the message is printed.
🧠 Conceptual
expert3:00remaining
Which option correctly demonstrates catching and rethrowing a PDO exception?
You want to catch a PDOException, log the error message, and then rethrow it to be handled elsewhere. Which code snippet does this correctly?
Attempts:
2 left
💡 Hint
Remember that code after throw is not executed and variables must be in scope.
✗ Incorrect
Option B logs the error message and then rethrows the exception inside the catch block. Option B throws before logging, so logging never happens. Option B misses semicolons causing syntax errors. Option B throws $e outside catch block where $e is undefined, causing error.