这个逻辑出了什么问题?
var selectString = 'SELECT EXISTS(SELECT 1 FROM users WHERE user="'+username+'")';
var queryUserExists = connection.query(selectString);
var resultsLength = queryUserExists._results.length;
console.log(queryUserExists);
if(resultsLength > 0){
socket.write("fail user already exists"+"\r\n");
} else {
console.log('insert=');
var query = connection.query (
'INSERT INTO users '+
'SET user = ?, password = ?, token = ?',
[username, password, token]
);
socket.write("success"+"\r\n");
}
resultsLength始终返回零。 使用此查询的正确方法是什么?
返回对象:
sql: 'SELECT 1 FROM users WHERE user = \'a new user is my name\' ORDER BY user LIMIT 1',
typeCast: true,
nestTables: false,
_resultSet: null,
_results: [],
_fields: [],
_index: 0,
_loadError: null }
答案 0 :(得分:2)
试试这个:
SELECT 1
FROM users
WHERE EXISTS (SELECT 1
FROM users
WHERE user = 'username')
ORDER BY user
LIMIT 1;
或:为什么不:
SELECT 1
FROM users
WHERE user = 'username'
ORDER BY user
LIMIT 1;
请注意:
ORDER BY user
LIMIT 1;
仅仅是为了表现。
答案 1 :(得分:2)
正确的代码:感谢https://stackoverflow.com/users/722783/mahmoud-gamal对优化的数据库查询!
connection.query("SELECT 1 FROM users WHERE user = '"+username+"' ORDER BY user LIMIT 1", function (error, results, fields) {
if (error) {
console.log(error);
socket.write("fail internal error"+"\r\n");
}
if (results.length > 0) {
console.log('fail');
socket.write("fail user already exists"+"\r\n");
} else {
console.log('insert');
var query = connection.query (
'INSERT INTO users '+
'SET user = ?, password = ?, token = ?',
[username, password, token]
);
socket.write("success"+"\r\n");
}
console.log(results);
});