gpt4 book ai didi

mysql - 使用node-mysql查询多行

转载 作者:行者123 更新时间:2023-11-29 13:45:20 27 4
gpt4 key购买 nike

此问题与node-mysql有关。

我似乎对以下代码有问题,并且它似乎与用户定义变量的使用有关。呈现的查询可以在任何 mysql IDE 中正常运行,返回多条记录。然而,当由node-mysql执行时,它只返回一条记录。

我已经验证,消除指定 T3.gender_rank 的 WHERE 子句可以在 node-mysql 和我的 mysql IDE 中创建可预测的结果。

这个问题以前有人提出过吗,还是我做错了什么?

var mysql = require('mysql'); // Establish SQL Support
var sql =
"select team, `div`, sum(points) AS teampoints "+
"from ( "+
" select "+
" *, "+
" (@genderRank := CASE WHEN @genderTMP <> gender THEN 1 ELSE @genderRank+1 END) AS gender_rank, "+
" (@genderTMP := gender) AS _gt "+
" from ( "+
" select * "+
" from racepoints "+
" WHERE "+
" ltrim(rtrim(race)) = '"+data.eventName+"' AND "+
" racedate = '"+getSimpleDate(new Date(data.eventStart))+"' "+
" ORDER BY team,gender,points DESC "+
" ) T1, "+
" (select @genderRank:=0 AS gender_rank_start) T2 "+
") T3 "+
"WHERE "+
" (T3.gender_rank <= 4 AND rtrim(ltrim(`div`)) = 'D2') OR "+
" (T3.gender_rank <= 3 AND rtrim(ltrim(`div`)) = 'D1') "+
"GROUP BY team, `div` "+
"ORDER BY `div`, teampoints DESC, team";


var db = new mysql.createConnection({
host : 'localhost',
user : 'root',
password : 'admin',
database : 'nps',
multipleResults : true
});
db.connect();
db.query(
sql,
function(err,rows,fields){
if(err){
console.log(err);
return;
}
console.log(rows);
}
);
db.end();

SQL 数据库文件也可在此处获取:https://snipt.net/download/dde8b4b5ce8cd5fca21ac2334bae634f/-5369.sql

最佳答案

不要直接将变量添加到 sql 字符串中,而是让 mysql 包为您完成此操作。这通常可以解决此类问题,并且还可以防止 SQL 注入(inject)。

这是使用问号(每个变量一个)后跟变量数组来完成的。

例如

connection.query('SELECT * FROM users WHERE id = ?', [userId], function(err, results) {
// ...
});

关于mysql - 使用node-mysql查询多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17499560/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com