Согласно документации, стоит использовать только функцию mysql_real_escape_string.
Насколько я понимаю, это связано в основном с применением юникода и действительно оправдано.
Вопрос: насколько часто ошибается mysql_escape_string и можно ли в языках с нативной поддержкой юникода пользовать своей реализацией вроде:
/**
* Escape string for mysql. Don't use native function,
* because it doesn't work without connect.
*/
exports.escapeStr = function(str) {
return str.replace(/[\\"']/g, "\\$&").replace(/[\n]/g, "\\n")
.replace(/[\r]/g, "\\r").replace(/\x00/g, "\\0");
};
UPD: Вышеприведённый код не полный, в нём присутствуют не все
символы, которые нужно экранировать. Давайте будем исходить из того, что replace для \b, \t, \Z, _, % также присутствуют:
exports.escapeStr = function(str) {
return str.replace(/[\\"']/g, "\\$&").replace(/\n/g, "\\n")
.replace(/\r/g, "\\r").replace(/\x00/g, "\\0")
.replace(/\b/g, "\\b").replace(/\t/g, "\\t")
.replace(/\x32/g, "\\Z") // \Z == ASCII 26
.replace(/_/g, "\\_").replace(/%/g, "\\%");
};