错误:mysqld_stmt_execute 的参数不正确
Posted
技术标签:
【中文标题】错误:mysqld_stmt_execute 的参数不正确【英文标题】:Error: Incorrect arguments to mysqld_stmt_execute 【发布时间】:2021-04-09 03:05:48 【问题描述】:我正在做一个 nodeJs 项目,并为 mysql 数据库使用一个 npm 包 mysql2。
MySql 配置:-
let mysql = MYSQL.createConnection(
host: `$config.mysql.host`,
user: `$config.mysql.user`,
password: `$config.mysql.password`,
database: `$config.mysql.db`,
);
当我使用查询时
async function getUsers (pageNumber) // suppose pageNumber = 1
const [result] = await mysql.execute(
`SELECT * FROM user LIMIT ?,20;`,
[pageNumber]
);
return result;
上面的代码工作正常。但是当我试图将任何数字与 pageNumber 相乘时,它会抛出错误 Error: Incorrect arguments to mysqld_stmt_execute
例如
async function getUsers (pageNumber) // suppose pageNumber = 1
pageNumber = pageNumber * 20; // here we multiply 20 with pageNumber (20 is the row limit)
const [result] = await mysql.execute(
`SELECT * FROM user LIMIT ?,20;`,
[pageNumber]
);
return result;
上面的代码抛出错误。
注意:- pageNumber 的类型是数字而不是字符串。
请帮忙。
【问题讨论】:
你分享的第一个代码块适合你吗?因为我正在尝试重现该问题,但第一个问题对我产生了错误。 【参考方案1】:这似乎是 MySQL 版本 8.0.22 中引入的错误,从 8.0.19 更新后我遇到了同样的错误。不确定原因或适当的解决方案,在此期间我将值映射到字符串,根据https://github.com/sidorares/node-mysql2/issues/1239#issuecomment-718471799,这似乎有效。
【讨论】:
【参考方案2】:就像一辆越野车,像这样使用插值(是的,这是一种不好的做法,但你可以同时提出解决方案):
const [result] = await mysql.execute(
`SELECT *
FROM user
LIMIT $pageNumber,20;`
);
并且,如果变量是字符串,则在插值周围放置 ' '
`SELECT * FROM user WHERE xname = '$x' ;`
【讨论】:
这是一个糟糕的建议。使用插值完全消除了使用execute
而不是 query
的好处。另外,在使用插值时,了解SQL injection
的危险非常重要。如果你走这条路,你应该知道如何减轻这种风险。以上是关于错误:mysqld_stmt_execute 的参数不正确的主要内容,如果未能解决你的问题,请参考以下文章
php mysqi bind_param 变量数与准备好的语句中的参数数不匹配[重复]
call_user_func_array() - 警告:mysqli_stmt::bind_param():变量数与准备语句中的参数数不匹配