【问题标题】:nodejs express mysql query with 'SET @'XXX''nodejs用'SET @'XXX''表达mysql查询
【发布时间】:2019-05-27 04:23:12
【问题描述】:

我正在开发 nodejs/express 应用程序。在我的路线中,我需要从 MySQL 数据库中查询数据。对于其中包含参数的查询,它可以正常工作。 任何不带参数的查询都按预期工作:

SELECT * FROM table WHERE col = 'b'

但下面的返回undefined

 SET @a = 'b'
 SELECT * FROM table where col = @a

我在单独的函数中为查询生成字符串(不确定这是否有任何区别)。 任何帮助将不胜感激。

【问题讨论】:

  • 如果您发布了用于与数据库对话的代码,而不仅仅是 sql 语句,将会有所帮助
  • @twoleggedhorse。我正在使用标准 const db = require('../server'); db.query(查询,结果)。这工作正常。我的问题是仅使用参数进行查询。

标签: mysql node.js express parameters routes


【解决方案1】:

我认为您可能正在寻找 ? 占位符方法,描述于

https://www.w3schools.com/nodejs/nodejs_mysql_where.asp

var adr = 'Mountain 21';
var sql = 'SELECT * FROM customers WHERE address = ?';
con.query(sql, [adr], function (err, result) {
  if (err) throw err;
  console.log(result);
});

还有多个占位符,作为数组传入:

var name = 'Amy';
var adr = 'Mountain 21';
var sql = 'SELECT * FROM customers WHERE name = ? OR address = ?';
con.query(sql, [name, adr], function (err, result) {
  if (err) throw err;
  console.log(result);
});

【讨论】:

  • 谢谢。它适用于我的一些查询,只需稍作修改,这很棒。但是其中一些具有动态语句,即“PREPARE dynamic_statement FROM @query; EXECUTE dynamic_statement 任何想法如何处理这些。
  • 必须是完全动态的吗?这通常被描述为代码“气味”,你能举个例子吗?
  • 以下是动态构建语句的示例,可能适合您的需求blog.stvmlbrn.com/2018/07/27/…
  • 不确定“代码味道”是什么,但听起来不太令人鼓舞。在当前的表结构下,它必须是动态的。下面是一些代码(我用#替换了@): let strMjrRank ='SET #userid = '" + userid + "'; SET #cip1 := (SELECT .... FROM xxx WHERE xxx.ut_userid = #userid); SET #cip1m := (LEFT(#cip1,6)); SET #w1 := CAST(RIGHT(#cip1,LENGTH(#cip1)-INSTR(#cip1,'_')) 已签名); SET #query := CONCAT('SELECT ...... ((', #cip1m, ' * ', #w1, ') + .....) PREPARE dynamic_statement FROM #query; EXECUTE dynamic_statement; cip1m 是表中的列名。
  • 也许一个sql函数会更好?只需传入用户 ID,然后离开,一切都在 sql 中,你可以在那里做更复杂的事情。或者,进行多次数据库调用;一个获取 cip1,在代码中进行字符串操作以获取其他值。现在你已经拥有了最后一次数据库调用所需的一切......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-09
  • 1970-01-01
相关资源
最近更新 更多