No articles found
Try different keywords or browse our categories
Fix: Call to a member function prepare() on bool error in PHP - Quick Solutions
Quick guide to fix 'Call to a member function prepare() on bool' errors in PHP. Essential fixes with minimal code examples.
The ‘Call to a member function prepare() on bool’ error occurs when trying to call prepare() on a boolean value instead of a PDO object. This happens when PDO connection fails and returns false.
Common Causes and Fixes
1. Failed PDO Connection
<?php
// ❌ Error: Connection failed, $pdo is false
$pdo = new PDO("mysql:host=localhost;dbname=nonexistent", "user", "pass");
$stmt = $pdo->prepare("SELECT * FROM users"); // Error!
?>
<?php
// ✅ Fixed: Check connection success
$pdo = new PDO("mysql:host=localhost;dbname=existing", "user", "pass");
if ($pdo) {
$stmt = $pdo->prepare("SELECT * FROM users");
}
?>
2. No Error Checking
<?php
// ❌ Error: No error handling
$pdo = new PDO("mysql:host=localhost;dbname=db", "wronguser", "wrongpass");
$stmt = $pdo->prepare("SELECT * FROM users"); // Error!
?>
<?php
// ✅ Fixed: Check connection
$pdo = new PDO("mysql:host=localhost;dbname=db", "user", "pass");
if ($pdo instanceof PDO) {
$stmt = $pdo->prepare("SELECT * FROM users");
}
?>
3. Exception Mode
<?php
// ❌ Error: Silent failure
$pdo = new PDO("mysql:host=localhost;dbname=db", "user", "pass");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
$stmt = $pdo->prepare("SELECT * FROM users"); // May fail silently
?>
<?php
// ✅ Fixed: Exception mode
$pdo = new PDO("mysql:host=localhost;dbname=db", "user", "pass");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->prepare("SELECT * FROM users");
?>
4. Using mysql_connect (Wrong Function)
<?php
// ❌ Error: Wrong function, returns bool
$connection = mysql_connect("localhost", "user", "pass");
$stmt = $connection->prepare("SELECT * FROM users"); // Error!
?>
<?php
// ✅ Fixed: Use PDO
$pdo = new PDO("mysql:host=localhost;dbname=db", "user", "pass");
$stmt = $pdo->prepare("SELECT * FROM users");
?>
5. Conditional Assignment
<?php
// ❌ Error: Conditional returns false
$pdo = some_function_that_returns_false();
$stmt = $pdo->prepare("SELECT * FROM users"); // Error!
?>
<?php
// ✅ Fixed: Verify return value
$result = some_function();
$pdo = $result instanceof PDO ? $result : new PDO("dsn", "user", "pass");
$stmt = $pdo->prepare("SELECT * FROM users");
?>
6. Error Suppression
<?php
// ❌ Error: @ suppresses error but returns false
$pdo = @new PDO("mysql:host=localhost;dbname=nonexistent", "user", "pass");
$stmt = $pdo->prepare("SELECT * FROM users"); // Error!
?>
<?php
// ✅ Fixed: No error suppression
$pdo = new PDO("mysql:host=localhost;dbname=existing", "user", "pass");
$stmt = $pdo->prepare("SELECT * FROM users");
?>
7. Function Returning Connection
<?php
// ❌ Error: Function returns false
function getConnection() {
return false; // Failed connection
}
$pdo = getConnection();
$stmt = $pdo->prepare("SELECT * FROM users"); // Error!
?>
<?php
// ✅ Fixed: Function returns valid PDO
function getConnection() {
return new PDO("mysql:host=localhost;dbname=db", "user", "pass");
}
$pdo = getConnection();
$stmt = $pdo->prepare("SELECT * FROM users");
?>
8. Proper Error Handling
<?php
// ❌ Error: No validation
$pdo = new PDO("mysql:host=localhost;dbname=db", "user", "pass");
if ($pdo) { // This will be true even if connection failed
$stmt = $pdo->prepare("SELECT * FROM users");
}
?>
<?php
// ✅ Fixed: Proper validation
try {
$pdo = new PDO("mysql:host=localhost;dbname=db", "user", "pass");
$stmt = $pdo->prepare("SELECT * FROM users");
} catch (PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
?>
9. Using mysql_* Functions
<?php
// ❌ Error: mysql_* returns resource/bool, not PDO
$connection = mysql_connect("localhost", "user", "pass");
mysql_select_db("database");
$stmt = $connection->prepare("SELECT * FROM users"); // Error!
?>
<?php
// ✅ Fixed: Use PDO
$pdo = new PDO("mysql:host=localhost;dbname=db", "user", "pass");
$stmt = $pdo->prepare("SELECT * FROM users");
?>
10. Variable Assignment Issue
<?php
// ❌ Error: Assignment returns false
$pdo = ($some_condition) ? false : new PDO("dsn", "user", "pass");
$stmt = $pdo->prepare("SELECT * FROM users"); // Error!
?>
<?php
// ✅ Fixed: Ensure PDO object
$pdo = ($some_condition) ? new PDO("good_dsn", "user", "pass") : new PDO("alternative_dsn", "user", "pass");
$stmt = $pdo->prepare("SELECT * FROM users");
?>
Quick Debugging Steps
- Check PDO connection returns PDO object, not boolean
- Verify connection string is correct
- Use try/catch for PDO exceptions
- Check error mode settings
- Verify credentials are correct
- Test connection separately before using prepare()
Prevention Tips
- Always check if PDO connection succeeded before using it
- Use try/catch blocks for PDO operations
- Set PDO error mode to exception:
PDO::ERRMODE_EXCEPTION - Verify connection string and credentials
- Don’t use error suppression (@) with PDO
- Use proper exception handling
- Test database connectivity separately
- Check PDO instance before calling methods
Remember: Ensure PDO connection is successful before calling prepare() or other PDO methods.
Related Articles
Fix: Duplicate entry for key PRIMARY error in PHP - Quick Solutions
Quick guide to fix 'Duplicate entry for key PRIMARY' errors in PHP. Essential fixes with minimal code examples.
How to Fix: MySQL server has gone away error in PHP
Quick guide to fix 'MySQL server has gone away' errors in PHP. Essential fixes with minimal code examples.
Fix: mysqli_connect(): Access denied error in PHP - Quick Solutions
Quick guide to fix 'mysqli_connect(): Access denied' errors in PHP. Essential fixes with minimal code examples.