首先,不是表被删除,而是所有行都被删除。其次,使用“<a href="https://github.com/felixge/node-mysql#escaping-query-values" rel="nofollow">准备好的语句”。
以下有点臃肿,但主要思想是使用类似于removeQuery
. 如果您需要不同于相等的条件,您可以将其作为字符串传递给修改后的版本post_rating < ?
(您而不是用户,生成的 sql 应该是类似的DELETE FROM posts WHERE post_rating < ?;
)。
不过,验证、模式和类似的东西应该交给某种ORM 。
var util = require('util');
var db = {
query: function (sql, params, callback) {
console.log('executing sql `%s` with params `%j`', sql, params);
callback();
}
};
function removeQuery(db, table, whereField, type) {
var sql = util.format('DELETE FROM %s WHERE %s = ?;', table, whereField);
var fn = db.query.bind(db, sql);
return function (value, callback) {
callback = callback || function () {};
if (typeof value != type) {
var message = util.format('Invalid type of `%s` field: should be `%s`; got `%s`',
whereField, type, typeof value);
var err = new Error(message);
console.error(err);
return process.nextTick(callback.bind(null, err));
}
fn([value], callback);
};
}
exports.removeUserByUsername = removeQuery(db, 'users', 'username', 'string');
exports.removePostByUserId = removeQuery(db, 'posts', 'user_id', 'number');
[42, 'tony', undefined].forEach(function (val) {
exports.removeUserByUsername(val);
exports.removePostByUserId(val);
});