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);
}
}
});
答案 0 :(得分: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) { /* ... */ }
);
使用占位符。