#javascript #sql #arrays #json #if-statement
#javascript #sql #массивы #json #if-statement
Вопрос:
Я пробую различные ответы из stack overflow, чтобы написать оператор if, который проверяет, является ли массив JSON заполненным или пустым. Однако консоль.журнал всегда возвращает значение undefined. Я использую node.js и webstorm как IDE. могу ли я получить некоторую помощь для решения этой проблемы?
function selectData(){
var sql = "SELECT * FROM cust where LastName = '" registerArray[0] "'";
con.query(sql, function (err, result) {
console.log(JSON.stringify(result)); //correctly displaying stuffs from db
if (result) { //statement not working correctly.
var pw = "SELECT ID FROM cust where LastName = '" registerArray[0] "'";
con.query(pw, function (err, result) {
var idcheck = JSON.stringify(result);
console.log(result); //always shows undefined
if (idcheck !== registerArray[0]){
return ("{re enter correct password}");
} else {
return ("{login successfully}");
}
});
} else {
return("{sign up first}");
}
});
}
con.end();
}
Комментарии:
1. Просто сделайте,
if (result)
это проверит,result
является ли значение ложным или истинным2. ваш запрос уязвим для атаки «sql injection».
con.query("SELECT * FROM cust WHERE LastName = ?", [registerArray[0]], function (err, res) { ... })
это то, что вы хотите использовать3. Что
console.log(JSON.stringify(result));
вам дает?4. @iArcadia вторая консоль.log(JSON.stringify(результат)) выдает неопределенный
5. @KunalMukherjee как я должен это использовать?
Ответ №1:
Проблема в том, что вы используете оператор строгого равенства с con.запрос, который возвращает нулевой массив ([])
, если он ничего не нашел. Поскольку вы используете строгое сравнение ([]) !== 0
, оно принимает значение TRUE, что вызывает вашу проблему.
Решение
Вы могли бы изменить свой оператор на if (result)
or, более четкую и подробную версию, if (result.length > 0 )
которая завершила бы то, что вы пытаетесь сделать.
Вы можете узнать больше о том, как JS вычисляет выражения из этой статьи Истинные и ложные значения в javascript
Ответ №2:
Используйте Object.keys
function selectData(){
var sql = "SELECT * FROM cust where LastName = '" registerArray[0] "'";
con.query(sql, function (err, result) {
console.log(JSON.stringify(result));
if (Object.keys(result).length !== 0 ){
Комментарии:
1. по-прежнему отображается undefined. Выдаю эту ошибку на моей стороне клиента: VM19: 1 Неперехваченная ошибка синтаксиса: неожиданный токен r в JSON в позиции 1 в JSON.parse (<анонимный>) в XMLHttpRequest. Отправьте logindata.xhttp.onreadystatechange
2. Опубликованный вами код не содержит JSON.parse
Ответ №3:
Чтобы проверить undefined и наличие элементов…
if (result !== undefined amp;amp; Object.keys(result).length !== 0) {
//you've got an object and it has some stuff
} else {
//handle situation where you've got nothing
}
Редактировать: по-видимому, вы не должны использовать getOwnPropertyNames, поскольку некоторые защищенные фреймворки заблокируют это .. вместо этого используйте Object.keys .