mysql node js quest - SELECT EXISTS查询

时间:2013-01-10 09:08:04

标签: mysql node.js select exists

这个逻辑出了什么问题?

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 }

2 个答案:

答案 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);
});