似乎无法使用带有JavaScript的node-mysql查询特定的东西

时间:2012-04-15 03:42:19

标签: javascript mysql node.js node-mysql

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

这似乎产生了一个未知列'user_name'。 我在网上搜索了一些人这样做的例子,但我找不到任何例子。我想查询具体的事情,甚至可能比较2个值,用户和密码。

任何帮助?

//为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);
    }
    }
}); 

1 个答案:

答案 0 :(得分:0)

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

select * from table where name = whatever

其中whateveruser_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) { /* ... */ }
);

使用占位符。