【问题标题】:SELECT query from mysql with node js (LIKE query)使用节点 js 从 mysql 中选择查询(LIKE 查询)
【发布时间】:2020-12-21 20:50:36
【问题描述】:

我正在使用node js来开发我的项目,我使用mysql来存储我的数据。

当我使用类似查询选择时遇到问题,它会给出如下错误:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'test'%' ORDER BY create_time DESC LIMIT 0,10' 附近使用正确的语法

SELECT * FROM user WHERE fullname LIKE N'%'test'%' ORDER BY create_time DESC LIMIT 0,10

我知道这里的错误是查询中的'test',但它是一个字符串,我无法删除它,我的代码在这里:

data = {};
data.fullname = 'test';
data.start    = 0;
data.limit    = 10;
let getFullname = function (data, callback) {
   return db.query("SELECT * FROM user WHERE fullname LIKE N'%?%' ORDER BY create_time DESC LIMIT ?,? ", [data.fullname,data.start,data.limit], callback);
}

如何解决我的问题,谢谢!

【问题讨论】:

    标签: mysql node.js


    【解决方案1】:

    你是对的,问题是mysql包添加单引号',可以使用如下方式

       return db.query(`SELECT * FROM user WHERE fullname LIKE N'%${data.fullname}%' ORDER BY create_time DESC LIMIT ?, ? `, [data.start,data.limit], callback);
    

    data.fullname = '%' + data.fullname + '%';
    return db.query("SELECT * FROM user WHERE fullname LIKE N? ORDER BY create_time DESC LIMIT ?,? ", [data.fullname,data.start,data.limit], callback);
    

    【讨论】:

    • 是的,第二种方式效果很好,因为我必须使用准备语句来保护我的应用程序
    【解决方案2】:

    CONCAT("%", ? , "%")

    :)

    这是我的代码的一部分:

    ########## 
    
    where += ` AND ( titre LIKE CONCAT("%", ? , "%") OR resume LIKE CONCAT("%", ? , "%") ) ` ; 
    vals.push(dataRes.rech) ; 
    vals.push(dataRes.rech) ; 
    
    ############# 
    
    sql = `SELECT #########  WHERE 1=1 ${where}` ;  
    
    connection.query( sql , vals , async function(err, services, fields) { 
    if(err) rej({er : 1 , code : err , sql: sql , vals : vals}) ; 
    else{ res({er : 0 , data : services }) }
    
    

    【讨论】:

    • 最好为您的解决方案提供完整的上下文,至少是return db.query() 部分,因此非常清楚插入此连接的位置和方式。你测试过这段代码吗?
    • 这是代码的一部分:########## where += ` AND (titre LIKE CONCAT("%", ? , "%") OR resume LIKE CONCAT( "%", ? , "%") ) ` ; vals.push(dataRes.rech) ; vals.push(dataRes.rech) ; ############ sql = SELECT ######### WHERE 1=1 ${where} connection.query( sql , vals , async function(err, services, fields) { if(err) rej({er : 1 , code : err , sql: sql , vals : vals}) ; else{ res({er : 0 , data : services }) }
    猜你喜欢
    • 1970-01-01
    • 2022-01-17
    • 2015-06-03
    • 2017-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-25
    相关资源
    最近更新 更多