我有代码,如果表不在mysql或" NULL"或空。
mysqlConnection.query('SELECT `something` FROM `here` WHERE `dog` = \'' +info+ '\'', function(err, row, fields) {
if(err) {
console.log('Error1');
return;
}
else if (!row.length) {
console.log('Error2');
return;
}
else if (row[0].something == 'NULL' || row[0].something == '') {
console.log('Error3');
return;
}
console.log('Works');
});
所以事情是,如果"某事"不是在mysql中,控制台显示Error2,但是如果"某些东西"是在mysql中,但如果它是NULL,控制台显示Works,那么问题是什么?我检查是否有东西,但它不会显示Error3。如果table为空,则显示Error3。谢谢你的帮助。
答案 0 :(得分:3)
我会尝试这样的事情:
:after
它正在使用" falsy"检查row [0] .something,如果值未定义,则返回false,null或空字符串。它还修复了t.niese提到的注入攻击向量。
答案 1 :(得分:0)
如果您认为在运行类似Array<any>
的SQL时收到select name from employee
的情况下,您应该有三个问题:
由于这些问题会发生数百次,我使用以下方法(在TypeScript
中):
let ret: Array<any> = connection.query('select name from employee',...);
for (let r of ret) {
name = getValueColumn(r,'name','This will be thrown if content is null');
};
export function getValueColumn(obj: any, fieldName: string, messageIfNull: string = null): any {
fieldName = fieldName.toLocaleLowerCase();
if (!obj) {
throw new CustomError(errorCodes.connection.rowNull, 'Linha nula e sem campos');
} else if (!obj.hasOwnProperty(fieldName)) {
throw new CustomError(errorCodes.connection.fieldDoesNotExist, 'Campo não existe -> ' + fieldName);
} else {
if (!obj[fieldName]) {
if (messageIfNull) {
throw new CustomError(errorCodes.connection.fieldWithNullValue, messageIfNull + '\n' + fieldName +
' com valores nulos ou campo invalido\n' + obj);
};
return null;
};
return obj[fieldName];
};
};
如果您仅使用if (!ret) {...}
检查结果,则它将始终为false,因为空数组不为空。所以你必须检查if(!ret[0]) {..}
因此,处理所有三个问题,并且每次要解析查询时都不必担心。
答案 2 :(得分:0)
我知道我迟到了 5 年零 9 个月,但对于那些为此苦苦挣扎的人,
这是一个解决方案。表为空时的值不是 NULL
。我遇到了类似的问题,我想在表为空时将 AUTO_INCREMENT
重置为 1。要检测它何时为空,我们必须查看它是否有任何索引为 0 的元素。如果它有一个元素,它将返回类似:RowDataPacket { // data }
的内容。如果没有,它将返回 undefined
。看看我要做什么?只需添加一个条件来查看 result[0]
是否未定义。想要一些代码来更好地理解它吗?当然!这是:
db.query("SELECT * FROM tablename", (err, result) => {
if (err) throw err;
else {
// If the first element does not exist
if (result[0] == undefined) {
db.query("yourquery", (err) => {
if (err) throw err;
});
} else {
res.send(result);
}
}
});