Skip to content

[BUG] D1_ERROR: Wrong number of parameter bindings for SQL query. #803

@alex-all3dp

Description

@alex-all3dp

Describe the bug

I have a worker deployed with the following open-next config:

import {defineCloudflareConfig} from '@opennextjs/cloudflare'
import r2IncrementalCache from '@opennextjs/cloudflare/overrides/incremental-cache/r2-incremental-cache'
import {withRegionalCache} from '@opennextjs/cloudflare/overrides/incremental-cache/regional-cache'
import memoryQueue from '@opennextjs/cloudflare/overrides/queue/memory-queue'
import d1NextTagCache from '@opennextjs/cloudflare/overrides/tag-cache/d1-next-tag-cache'

const openNextConfig = {
  ...defineCloudflareConfig({
    incrementalCache: withRegionalCache(r2IncrementalCache, {
      mode: 'long-lived',
      shouldLazilyUpdateOnCacheHit: true,
    }),
    queue: memoryQueue,
    tagCache: d1NextTagCache,
  }),
  cloudflare: {
    skewProtection: {
      enabled: true,
      maxNumberOfVersions: 10, // Maximum number of previous versions to use.
      maxVersionAgeDays: 20, // Age of the oldest version to use (from the last deployment date)
    },
  },
}

export default openNextConfig

... and the following wrangler config:

{
  "$schema": "../../node_modules/wrangler/config-schema.json",
  "main": "cf-worker-with-sentry.ts",
  "name": "${worker_name}",
  "compatibility_date": "2024-12-30",
  "compatibility_flags": ["nodejs_compat", "global_fetch_strictly_public"],
  "assets": {
    "directory": ".open-next/assets",
    "binding": "ASSETS",
    "run_worker_first": true,
  },
  "services": [
    {
      "binding": "WORKER_SELF_REFERENCE",
      "service": "${worker_name}",
    },
  ],
  "r2_buckets": [
    {
      "binding": "NEXT_INC_CACHE_R2_BUCKET",
      "bucket_name": "${r2_bucket_name}",
    },
  ],
  "d1_databases": [
    {
      "binding": "NEXT_TAG_CACHE_D1",
      "database_id": "${d1_database_id}",
      "database_name": "${d1_database_name}",
    },
  ],
  "observability": {
    "logs": {
      "enabled": true,
    },
  },
  "vars": {
    "NODE_ENV": "production",
    "CF_WORKER_NAME": "${worker_name}",
    "CF_PREVIEW_DOMAIN": "${worker_preview_domain}",
    "CF_WORKERS_SCRIPTS_API_TOKEN": "${worker_scripts_api_token}",
    "CF_ACCOUNT_ID": "${cf_account_id}",
  },
  "routes": [
    {
      "pattern": "${worker_domain}",
      "custom_domain": true,
    },
  ],
}

The app appears to be working normally but in the logs I can see the following error logs

{
  "source": {
    "level": "error",
    "message": "Error: D1_ERROR: Wrong number of parameter bindings for SQL query.",
    "$cloudflare": {
      "$metadata": {
        "id": "01K0PF84ZKVSYVCJPAPP5Y4YCJ",
        "type": "cf-worker",
        "error": "Error: D1_ERROR: Wrong number of parameter bindings for SQL query.",
        "messagePattern": "Error: D1_ERROR: Wrong number of parameter bindings for SQL query."
      }
    }
  },
  "dataset": "cloudflare-workers",
  "timestamp": "2025-07-21T12:27:29.876Z",
  "$workers": {
    "truncated": false,
    "event": {
      "request": {
        "url": "https://<domain></path>?_rsc=1a9qi",
        "method": "GET",
        "path": "</path>",
        "search": {
          "_rsc": "1a9qi"
        }
      }
    },
    "outcome": "ok",
    "scriptName": "<workerName>",
    "eventType": "fetch",
    "executionModel": "stateless",
    "scriptVersion": {
      "id": "e5ec4ea0-8ea5-490d-9538-36ad1018381c"
    },
    "requestId": "962ab157596e3625"
  },
  "$metadata": {
    "id": "01K0PF84ZKVSYVCJPAPP5Y4YCJ",
    "requestId": "962ab157596e3625",
    "trigger": "GET </path>",
    "service": "<workerName>",
    "level": "error",
    "error": "Error: D1_ERROR: Wrong number of parameter bindings for SQL query.",
    "message": "Error: D1_ERROR: Wrong number of parameter bindings for SQL query.",
    "account": "62d5862473ac28e692dfb93777cf3e0d",
    "type": "cf-worker",
    "fingerprint": "c4e13b6a731863b00df933dab4942972",
    "origin": "fetch",
    "messageTemplate": "Error: D1_ERROR: Wrong number of parameter bindings for SQL query."
  },
  "links": []
}

When looking into the revalidations table in D1 it appears empty, which is also unexpected?

Not sure if this is in any way related to #711

Steps to reproduce

  1. Deploy app with D1 tag cache (and skew protection?)
  2. Trigger requests
  3. Check D1 content and worker logs

Expected behavior

  • Revalidation data being present in D1
  • No failing DSQL queries in the logs

@opennextjs/cloudflare version

1.5.2

Wrangler version

4.25.0

next info output

Operating System:
  Platform: darwin
  Arch: arm64
  Version: Darwin Kernel Version 23.6.0: Wed Jul 31 20:53:05 PDT 2024; root:xnu-10063.141.1.700.5~1/RELEASE_ARM64_T8112
  Available memory (MB): 16384
  Available CPU cores: 8
Binaries:
  Node: 22.17.1
  npm: 10.9.2
  Yarn: N/A
  pnpm: N/A
Relevant Packages:
  next: 15.3.4 // There is a newer version (15.4.2) available, upgrade recommended! 
  eslint-config-next: 15.3.4
  react: 19.1.0
  react-dom: 19.1.0
  typescript: 5.8.2
Next.js Config:
  output: N/A

Additional context

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingtriage

    Type

    No type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions