我正在尝试使用
LIKE
使用 mysql2 搜索 mysql 表中的行,但我在控制台中收到有关参数不正确的错误。准备好的语句的参数与查询字符串的需求相匹配。
代码:
import mysql from "mysql2";
export const searchMovies = (phrase: string, limit: number): Promise<Movie[]> => {
return new Promise((resolve, reject) => {
const pattern = `%${phrase.replace("!", "!!").replace("%", "!%").replace("_", "!_")}%`;
const sql = "SELECT * FROM movies WHERE `Name` LIKE ? LIMIT ?";
const params = [pattern, limit];
db.execute(sql, params, (err, rows: RowDataPacket[]) => {
if (err) reject(err);
if (rows == undefined) return [];
resolve(rows.map(x => ({
id: x.ID,
name: x.Name,
language: x.Language,
year: x.Year
})));
});
});
};
控制台错误:
/home/node/app/node_modules/mysql2/lib/packets/packet.js:728
const err = new Error(message);
^
Error: Incorrect arguments to mysqld_stmt_execute
at Packet.asError (/home/node/app/node_modules/mysql2/lib/packets/packet.js:728:17)
at Execute.execute (/home/node/app/node_modules/mysql2/lib/commands/command.js:29:26)
at Connection.handlePacket (/home/node/app/node_modules/mysql2/lib/connection.js:478:34)
at PacketParser.onPacket (/home/node/app/node_modules/mysql2/lib/connection.js:97:12)
at PacketParser.executeStart (/home/node/app/node_modules/mysql2/lib/packet_parser.js:75:16)
at Socket.<anonymous> (/home/node/app/node_modules/mysql2/lib/connection.js:104:25)
at Socket.emit (node:events:514:28)
at addChunk (node:internal/streams/readable:376:12)
at readableAddChunk (node:internal/streams/readable:349:9)
at Readable.push (node:internal/streams/readable:286:10) {
code: 'ER_WRONG_ARGUMENTS',
errno: 1210,
sqlState: 'HY000',
sqlMessage: 'Incorrect arguments to mysqld_stmt_execute',
sql: 'SELECT * FROM movies WHERE `Name` LIKE ? LIMIT ?'
}
从“mysql2”导入mysql;
export const searchMovies =(短语:字符串,限制:数量):Promise
%${phrase.replace("!", "!!").replace("%", "!%").replace("_", "!_")}%
;
const sql = "从电影中选择 * Name
LIKE ? LIMIT ?";
const params = [模式,限制];
db.execute(sql, params, (err, rows: RowDataPacket[]) => {
如果(错误)拒绝(错误);
if (行==未定义) return [];
解析(rows.map(x =>({
id:x.ID,
姓名:x.姓名,
语言:x.语言,
年份: x.Year
})));
});
});
};