首先,它不是表被刪除,但所有行都被刪除。其次,使用「prepared statements」。
以下有些臃腫,但主要想法是使用功能類似於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);
});