mysql - NodeJS MySQL 模块的 escape()/escapeId() 方法是如何工作的?
问题描述
我正在尝试了解 NodeJS 模块的转义方法(以构建该模块的我的版本),它是仅删除元字符/特殊字符还是有所不同?
解决方案
mysql pacakge使用sqlstring包escape
和escapeId
方法。
您可以检查源代码以了解它是如何工作的。
escape
:
- 数字保持不变
- 布尔值转换为
true
/false
- 日期对象转换为
'YYYY-mm-dd HH:ii:ss'
字符串 - 缓冲区被转换为十六进制字符串,例如
X'0fa5'
- 字符串被安全转义
- 数组变成列表,例如
['a', 'b']
变成'a', 'b'
- 嵌套数组变成分组列表(用于批量插入),例如
[['a', 'b'], ['c', 'd']]
变成('a', 'b'), ('c', 'd')
- 具有
toSqlString
方法的对象将.toSqlString()
被调用,并且返回值用作原始 SQL。 - 对于对象上的每个可枚举属性,对象都会变成
key = 'val'
对。如果属性的值是一个函数,则跳过它;如果属性的值是一个对象,则对其调用 toString() 并使用返回的值。 undefined / null
被转换为NULL
NaN / Infinity
保持原样。MySQL 不支持这些,并且尝试将它们作为值插入将触发 MySQL 错误,直到它们实现支持。
escapeId
:
- 数组变成列表,例如
['a', 'b']
变成'a', 'b'
- 字符串被安全转义
安全转义字符串:
{
'\0' : '\\0',
'\b' : '\\b',
'\t' : '\\t',
'\n' : '\\n',
'\r' : '\\r',
'\x1a' : '\\Z',
'"' : '\\"',
'\'' : '\\\'',
'\\' : '\\\\'
};
推荐阅读
- node.js - Npm install ...在windows上安装依赖项时出错
- eclipse - 如何从现有项目创建 Eclipse 插件
- fluid-framework - 如何在没有实验包的情况下使用 routerlicious?
- python - 如何在 Python 3 中删除除一个特定文件夹之外的所有文件夹
- webpack - 如何使用带有 webpack、sass-loader 和 dart sass 的波浪号前缀导入 sass
- kdb - 在 Q 中,如何从 Kdb 表中获取最后 X 分钟的行?
- postgresql - 过滤日期,其中日期是上个季度的日期
- javascript - 为什么razorpay 支付网关显示此错误?
- php - Symfony 5:驱动程序发生异常:找不到驱动程序
- javascript - glyphicon-calendar 显示禁用分钟选项