mysqld_stmt_execute 的参数不正确,参数匹配查询

问题描述 投票:0回答:1

我正在尝试使用

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 ?'
}
mysql node.js typescript prepared-statement node-mysql2
1个回答
0
投票

从“mysql2”导入mysql;

export const searchMovies =(短语:字符串,限制:数量):Promise => { 返回新的 Promise((解决, 拒绝) => { const 模式 =

%${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 }))); }); }); };

© www.soinside.com 2019 - 2024. All rights reserved.