Существует много причин, но, возможно, наиболее важным является то, что эти функции поощряют небезопасные методы программирования, поскольку они не поддерживают подготовленные заявления. Подготовленные утверждения помогают предотвратить атаки SQL-инъекций.
При использовании функций mysql_*
вы должны помнить, чтобы запускать параметры, заданные пользователем, через mysql_real_escape_string()
. Если вы забудете только в одном месте или если вам удастся избежать только части входа, ваша база данных может подвергаться атаке.
Использование подготовленных операторов в PDO
или mysqli
сделает так, чтобы эти типы ошибок программирования сложнее сделать.
Оказывается, бросание ObjectId, похоже, было проблемой. Он был запущен с использованием идентификатора объекта типа схемы mongoose.Schema.Types.ObjectId
, когда он должен был быть просто чистым ObjectId mongoose.Types.ObjectId
.
var aggregate = [
{
$match: {
'lenderId': new mongoose.Types.ObjectId(req.user),
'_disbursed': true
}
},
{
$unwind:'$emi'
},
{
$match: {
'emi._settled': false,
}
}
];
При использовании метода find или findById запрос может быть только:
var query = {
$or: [
{'_sender':req.body._id},
{'_recipient':req.body._id}
]
};
При использовании агрегата для запроса нужен листинг
var mongoose = require('mongoose');
var query = {
$or: [
{'_sender':new mongoose.Types.ObjectId(decoded._id)},
{'_recipient':new mongoose.Types.ObjectId(decoded._id)}
]
};