ERROR: bind message supplies 2 parameters, but prepared statement requires 1

The number of query parameters sent doesn’t match the $1, $2 … placeholders in the SQL.

Seen on: PostgreSQL

Meaning

Passing extra/missing values, placeholders inside quoted strings (which aren’t parameters), or reusing a parameter array for a different query.

Common causes

  • Parameter array length mismatch
  • '$1' inside quotes (literal text, not a parameter)
  • Dynamic SQL built incorrectly

⚡ Quick fix

  1. Count placeholders and values
  2. Don’t quote placeholders: WHERE name = $1
  3. Log the final SQL and params

Detailed fix by platform

Node.js

  1. pool.query('SELECT * FROM users WHERE email = $1 AND active = $2', [email, true]);

How to diagnose

  1. SQL — How many $n?
  2. Params — How many values?

🧠 Still stuck? Analyze your error

Paste the full message, response headers or stack trace — we'll detect the platform and point to the most likely cause.