То, что вы говорите в заголовке вопроса "MySQL всегда возвращает true ...", неверно;Вы позже скажете в комментариях, что MySQL возвращает 0 или 1
Ваш JavaScript имеет недостаток в логике. Вы говорите if(result)
, но результат - это гораздо больше, чем просто целое число 0 или 1, поэтому вы говорите, будет ли (результат) эффективно проверять, является ли он нулевым или нет, что никогда не бывает, следовательно, "всегда верно"
Ваш код должен выглядеть примерно так (я также исправил проблему, заключающуюся в том, что ваш старый код открыт для хакерских атак:
//alias the result column using AS xxx to make it easier to refer to in js
//ALWAYS use parameters (WHERE username = ?) to pass values from the user into the db
let sql = "select exists (select * from demoApp where username = ?) as userExists";
connection.query(sql, [username],
function (error, result) {
if (error) {
LOG.error(error);
return;
}
else {
LOG.info(result);
if (result[0].userExists == 1) { //no harm in being explicit. Result is a collection of rows with names of columns, index it to get the first and specify the column (which is really hard to do with name of you don't alias your query result
LOG.info("Username already exists!");
}
...