How to Fix "General error: 25 bind or column index out of range" PHP PDO Error?

When using PHP PDO, if you encounter an error like the following:

Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 25 bind or column index out of range

Then, it likely means that you are binding more values than the parameters specified in the query. If such is the case, then the statement (whether it's INSERT, UPDATE or others) will fail and an error will be emitted.

To demonstrate this, let's suppose you have a customer table like the following:

$db = new PDO('sqlite::memory');

$schema =<<<SQL
    CREATE TABLE `customer` (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name VARCHAR(25) NOT NULL,
        date_birth DATE NOT NULL
    );
SQL;

$db->exec($schema);

To reproduce the error, let's assume that you're binding an extra parameter to the query called "extra":

$query =<<<SQL
    INSERT INTO `customer` (name, date_birth)
    VALUES (:name, :date_birth)
SQL;

$sth = $db->prepare($query);

$boundedArgs = [
    'name' => 'John',
    'date_birth' => '2000-10-10',
    // Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 25 bind or column index out of range
    'extra' => '',
];

$sth->execute($boundedArgs);

To fix this error, you simply need to make sure that the bound parameters are not more than what you are expecting in your query. You can do either of the following:

  • Add the missing parameter name to the query, or;
  • Remove the extra parameter from the bounded parameters.

This post was published by Daniyal Hamid. Daniyal currently works as the Head of Engineering in Germany and has 20+ years of experience in software engineering, design and marketing. Please show your love and support by sharing this post.