node.js mysql 在 HANDLER RESOLVED 附近插入 ER_PARSE 错误
node.js mysql insert ER_PARSE ERROR near HANDLER RESOLVED
我在 Node.JS (6.10.3) 上使用 npm 包 mysql (2.13.0) 在 AWS Lambda 中编写了一个 API 运行ning。这是使用 Serverless 部署和管理的。
我正在使用以下代码将单行插入到 MariaDB RDS 实例的 table 中:
var mysql = require('mysql');
var connection = mysql.createConnection({
"host": process.env.CONFIG_HOST,
"user": process.env.CONFIG_WRITE_USER,
"password": process.env.CONFIG_WRITE_PW,
"database": process.env.CONFIG_DB,
"connectionLimit": 1
});
module.exports.post = (event, context, callback) => {
var body = JSON.parse(event.body);
var params = event.someParameter;
var sql = getSql(body.name);
console.log(sql);
connection.query(sql, onQueryComplete(params, callback));
}
const onQueryComplete = function(params, callback) {
return function(error, result) {
if (error) {
console.log(error);
callback(null, 'some error response');
}
// do something else...
}
}
function getSql(name) {
return `
INSERT INTO lds_config.test_table
(
name,
name_hash
)
VALUES
(
'${name}',
MD5('${name}')
);`;
}
如果我检查 table,我可以看到插入已成功完成并添加了新行,但是正在设置错误 - 这意味着某处出了问题(可能在插入之后) .
mysql(在console.log中)返回的错误是:
{
Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'HANDLER RESOLVED _____');
// Timeout clearing if needed
' at line 2
at Query.Sequence._packetToError (...\node_modules\mysql\lib\protocol\sequences\Sequence.js:52:14)
at Query.ErrorPacket <<stack trace continues>>)
code: 'ER_PARSE_ERROR',
errno: 1064,
sqlState: '42000',
index: 0
}
接下来是第二个错误,指出回调不是函数:
Debug: internal, implementation, error
TypeError: Uncaught error: callback is not a function
类似的代码在 API 的其他地方用于选择。谢谢!
进一步说明:
table 是:
CREATE TABLE lds_config.test_table(id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(500), name_hash CHAR(32));
console.log(sql);
的结果是:
INSERT INTO lds_config.test_table
(
name,
name_hash
)
VALUES
(
'test01',
MD5('test01')
);
当我 运行 直接在 mysql workbench 中时,它会起作用。
也包括查询,因为第一个错误是关于 MySQL 语法的。据我所知,关于回调不是函数,它没有在下面的代码中作为参数传递。
const onQueryComplete = function(params) {
return function(error, result, callback) {
if (error) {
console.log(error);
callback(null, 'some error response');
}
// do something else...
}
}
以上是更正后的。
我在 Node.JS (6.10.3) 上使用 npm 包 mysql (2.13.0) 在 AWS Lambda 中编写了一个 API 运行ning。这是使用 Serverless 部署和管理的。
我正在使用以下代码将单行插入到 MariaDB RDS 实例的 table 中:
var mysql = require('mysql');
var connection = mysql.createConnection({
"host": process.env.CONFIG_HOST,
"user": process.env.CONFIG_WRITE_USER,
"password": process.env.CONFIG_WRITE_PW,
"database": process.env.CONFIG_DB,
"connectionLimit": 1
});
module.exports.post = (event, context, callback) => {
var body = JSON.parse(event.body);
var params = event.someParameter;
var sql = getSql(body.name);
console.log(sql);
connection.query(sql, onQueryComplete(params, callback));
}
const onQueryComplete = function(params, callback) {
return function(error, result) {
if (error) {
console.log(error);
callback(null, 'some error response');
}
// do something else...
}
}
function getSql(name) {
return `
INSERT INTO lds_config.test_table
(
name,
name_hash
)
VALUES
(
'${name}',
MD5('${name}')
);`;
}
如果我检查 table,我可以看到插入已成功完成并添加了新行,但是正在设置错误 - 这意味着某处出了问题(可能在插入之后) .
mysql(在console.log中)返回的错误是:
{
Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'HANDLER RESOLVED _____');
// Timeout clearing if needed
' at line 2
at Query.Sequence._packetToError (...\node_modules\mysql\lib\protocol\sequences\Sequence.js:52:14)
at Query.ErrorPacket <<stack trace continues>>)
code: 'ER_PARSE_ERROR',
errno: 1064,
sqlState: '42000',
index: 0
}
接下来是第二个错误,指出回调不是函数:
Debug: internal, implementation, error
TypeError: Uncaught error: callback is not a function
类似的代码在 API 的其他地方用于选择。谢谢!
进一步说明: table 是:
CREATE TABLE lds_config.test_table(id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(500), name_hash CHAR(32));
console.log(sql);
的结果是:
INSERT INTO lds_config.test_table
(
name,
name_hash
)
VALUES
(
'test01',
MD5('test01')
);
当我 运行 直接在 mysql workbench 中时,它会起作用。
也包括查询,因为第一个错误是关于 MySQL 语法的。据我所知,关于回调不是函数,它没有在下面的代码中作为参数传递。
const onQueryComplete = function(params) {
return function(error, result, callback) {
if (error) {
console.log(error);
callback(null, 'some error response');
}
// do something else...
}
}
以上是更正后的。