使用Node.js mysql2执行DELETE WHERE IN查询时列数不匹配错误排查
解决mysql2/promise中DELETE WHERE IN的数组参数绑定问题
正确实现方式
直接动态生成与数组长度匹配的占位符,再将数组作为参数传入即可:
const userIds = [45549, 46207]; // 生成对应数量的?占位符,用逗号分隔 const placeholders = userIds.map(() => '?').join(','); const deleteQuery = `DELETE FROM user WHERE id IN (${placeholders})`; // 直接传递数组作为参数列表 return await pool.query(deleteQuery, userIds);
错误原因分析
你之前的写法错误在于把整个数组作为单个参数传递给IN(?)里的?,mysql2会将这个数组解析为一个复合值,而非多个独立的ID值,这就导致SQL执行时出现"Column count doesn't match value count"的错误。
另外你尝试的userIds.map(id => [id])写法,会生成二维数组作为参数,同样不符合SQL语句的参数数量要求,因此也无法解决问题。
内容的提问来源于stack exchange,提问作者Ruben
相关产品推荐
相关产品推荐

