0
p_info_query('SELECT * FROM ' + <table> + ' WHERE name = ' + user_name, password, client_connect.id, p_info, function(results) {

这似乎会产生一个未知列“用户名”。我在网上搜索了一些这样做的人的例子,但我找不到任何人。我想查询特定的东西,甚至可能比较两个值,用户和密码。

有什么帮助吗?

// 为 p_info_query 函数编辑

function p_info_query(sql, password, client_socket_id, player_info_object, callback) {
  var result =  mysql_client.query(sql, function (error, results, fields) {
    if (error) {
        console.log('ERROR IN MYSQL LOGIN CALLBACK : '+ error);
        return false;
    }
    if (results.length  > 0) {

    // do stuff


    callback(true);
    } else {

    callback(false);
    }
    }
}); 
4

1 回答 1

0

你的问题是你没有引用,user_name所以你最终得到这样的 SQL:

select * from table where name = whatever

whatever的值在哪里user_name,像这样的未引用值被解析为标识符(本质上是该上下文中的列名),因此您的“未知列”错误。

大概p_info_query是您自己的东西,因为它不是node-mysql的一部分。您应该修改它以使用占位符,以便它可以在内部执行以下操作:

client.query(
    'select * from ' + table_name + ' where name = ?',
    [ user_name ],
    function(err, results, fields) { /* ... */ }
);

注意?SQL 和[user_name]数组中的 。


现在我们知道是什么p_info_query样子了,我们也可以修复它;你应该更新它看起来更像这样:

function p_info_query(sql, params, password, client_socket_id, player_info_object, callback) {
  var result =  mysql_client.query(sql, params, function (error, results, fields) {
    // ...

然后你可以这样说:

p_info_query(
  'SELECT * FROM ' + table_name + ' WHERE name = ?',
  [user_name],
  password,
  client_connect.id,
  p_info,
  function(results) { /* ... */ }
);

使用占位符。

于 2012-04-15T04:08:11.463 回答