【问题标题】:MYSQL Query Passed variable result 0MYSQL 查询传递变量结果 0
【发布时间】:2019-09-06 04:27:49
【问题描述】:

我一直在尝试运行一个非常简单的 MySQL 查询,但无济于事。我搜索了论坛,尝试了多种方法,但这对我的一生都不起作用。

我希望有人能指出错误,因为它可能非常愚蠢或非常简单。

我有一个 nodejs 应用程序,它有一个异步承诺设置到 MySQL 以从数据库中提取数据。数据来自游戏制作者,我认为这可能是问题的一部分。如果我使用我正在寻找的名称运行查询本身:

所以如果我这样输入查询(通过输入我想拉入查询的名称),它将提取数据,结果 1:

pool.query('SELECT * FROM rp_accounts WHERE username=' +mysql.escape('john'),   function(err, rows){
        if(err) {
        throw err;
        }else{
    // Do something with result.

console.log("Result: "+rows.length);


}
})

但是如果我尝试将变量传递给它

var playerName = value;

console.log("test:"+playerName+":test");

pool.query('SELECT * FROM rp_accounts WHERE username=' +mysql.escape('playerName'),
function(err, rows){
        if(err) {
        throw err;
        }else{
    // Do something with result.

console.log("Result: "+rows.length);


}
})

它的结果为 0,我知道从数据库中提取数据需要时间,但如果我“硬输入”我正在寻找的名称,查询工作完全正常,连接、查找并拉出一行。 如果我从 gamemaker 传递一个变量(通过缓冲区完成),我可以通过 console.log 看到我正在拉取的名称本身应该正是它需要找到的(在本例中为“john”),它返回 0。

我尝试过 LIKE 语句而不是 =、多种格式(trim()、使用 concat() 添加括号等)多个括号(即:[playerName])、=?使用变量,引号,删除了原始运行的 mySQL 注入保护,还尝试从该行中提取一个特定的表,以查看它是否有太多数据无法通过查询或其他方式获取?但没有,仍然是 0 个结果

收到它后是否有某种格式,它实际上并没有把这个词当作一个词来读? (如果这有意义的话)我是否在寻找应该是字段的行?正如我所看到的,它正在提取正确的用户名来拉 (john),而且看起来这应该没有问题,它让我在墙上又回来了。

感谢任何帮助,仍在学习中,正如我所提到的,我已经尝试了大多数明显的解决方案,但我很容易被忽视。干杯。

【问题讨论】:

  • 在查询中使用playerName删除单引号后尝试。

标签: javascript mysql node.js networking


【解决方案1】:

Going off of this documentation.

可能是你在+mysql.escape('playerName') 中引用了playerName

首先,尝试删除这样的引号:+mysql.escape(playerName)

如果这不起作用,请尝试使用:

const { Pool } = require('pg')
const pool = new Pool()

string playerName = value.toString();

pool.query('SELECT * FROM rp_accounts WHERE username = $1', [playerName], (err, result) => {
  if (err) {
    return console.error('Error executing query', err.stack)
  }
  console.log(result.rows.length)
})

或者这个简化版:

const { Pool } = require('pg')
const pool = new Pool()

string playerName = value.toString();

pool
  .query('SELECT $1', ['brianc'])
  .then(res => console.log(res.rows.length))
  .catch(err => console.error('Error executing query', err.stack))

【讨论】:

    【解决方案2】:

    谢谢你的回复,如果我还有剩下的,我会扯掉我的头发。

    我尝试了您的建议,但仍然没有得出结果。

    对于未来的任何人:原来我从游戏制造商那里发送了一个“buffer_string”,我把它改成了“buffer_text”,它现在可以正常工作了!我认为这是两个客户之间的某种空白问题。

    再次感谢您的回复,让我一直在猜测,我在 20 分钟内得到了它:)

    【讨论】:

      猜你喜欢
      • 2020-11-13
      • 1970-01-01
      • 1970-01-01
      • 2016-07-02
      • 2012-09-14
      • 1970-01-01
      • 2020-04-11
      • 2017-12-24
      • 2016-10-11
      相关资源
      最近更新 更多