You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用TypeScript+mysql2时connection.query()参数数量错误求助

解决mysql2 Promise版query在TypeScript中「Expected 1-2 arguments but got 3」错误

核心原因

mysql2的Promise封装版connection.query()仅支持1-2个参数(SQL语句 + 可选的参数数组/对象),而你可能沿用了回调版query的3参数写法(SQL、参数、回调函数),导致TypeScript类型检查报错。

正确写法示例

1. 基础查询(无参数)

const [rows] = await connection.query('SELECT * FROM users');

2. 带占位符参数的查询

使用数组传递参数(支持?占位符):

const [rows] = await connection.query('SELECT * FROM users WHERE id = ?', [123]);

使用对象传递命名参数:

const [rows] = await connection.query('SELECT * FROM users WHERE id = :id', { id: 123 });

3. 使用execute(预编译查询,更安全)

如果需要预编译支持,改用execute方法,参数格式与query一致:

const [rows] = await connection.execute('SELECT * FROM users WHERE id = ?', [123]);

自定义返回类型

为了获得更准确的TypeScript类型提示,可以手动指定泛型:

interface User {
  id: number;
  name: string;
  email: string;
}

const [rows] = await connection.query<User[]>('SELECT id, name, email FROM users');

Next.js 14环境注意事项

在Server Components中使用时,确保通过mysql2/promise创建连接,避免混用回调版API:

import { createConnection } from 'mysql2/promise';

async function getUserById(userId: number) {
  const connection = await createConnection({
    host: process.env.DB_HOST,
    user: process.env.DB_USER,
    password: process.env.DB_PASSWORD,
    database: process.env.DB_NAME
  });

  try {
    const [rows] = await connection.query<User[]>('SELECT * FROM users WHERE id = ?', [userId]);
    return rows[0];
  } finally {
    await connection.end();
  }
}

内容的提问来源于stack exchange,提问作者Dennis Jorgenson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 12:32:37