search
php star Featured

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.

person By Gautam Sharma
calendar_today January 8, 2026
schedule 4 min read
PHP PDO MySQL Prepare Boolean Database Code Fixes

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

  1. Check PDO connection returns PDO object, not boolean
  2. Verify connection string is correct
  3. Use try/catch for PDO exceptions
  4. Check error mode settings
  5. Verify credentials are correct
  6. 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.

Gautam Sharma

About Gautam Sharma

Full-stack developer and tech blogger sharing coding tutorials and best practices

Related Articles

php

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.

January 8, 2026
php

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.

January 8, 2026
php

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.

January 8, 2026