0
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);
    }
    }
}); 
4

1 に答える 1

0

あなたの問題は、あなたが引用していないuser_nameので、次のようなSQLになってしまうことです:

select * from table where name = whatever

wherewhateverは の値でありuser_name、そのような引用符で囲まれていない値は識別子 (本質的にはそのコンテキストの列名) として解析されるため、「不明な列」エラーが発生します。

node-mysqlp_info_queryの一部ではないため、おそらく独自のものです。内部で次のようなことができるように、プレースホルダーを使用するように変更する必要があります。

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 に答える