自有 MySQL 数据库访问
在选择自有 MySQL 数据库的情况下,除了使用数据模型的访问方法读写数据外,我们也提供了直接通过 SQL 命令读写数据的方法和接口,同时您也可以在云函数中,通过常规的数据库 SDK 实现数据库访问。
使用场景
- 常规查询或数据操作:使用数据模型方法
- 复杂查询,多表或联表查询:使用模型方法中的数据库查询能力。
- 复杂的写入、插入、更新数据:通过云函数中的通用数据库操作方法连接并操作数据库。
查询 MySQL 数据库
MySQL 数据库类型的模型,数据模型 SDK 提供两种模式的查询方法:
$runSQL
: 预编译模式, 通过参数化查询来避免 SQL 注入风险$runSQLRaw
原始模式, 更加灵活的模式,SQL 语句会当做原始字符串进行查询,存在 SQL 注入的风险
注意:
runSQL
、runSQLRaw
接口仅支持在服务端调用,如云函数/云托管/服务器等场景,不支持小程序/web 端直接调用- 建议优先采用预编译模式,避免 SQL 注入风险
- 当前仅开放了
select
语句,如果有其他 SQL 语句需求,请通过官方社群联系我们
预编译模式 $runSQL
预编译模式下使用参数化查询设计,结合静态模板语法和动态运行时参数,以实现灵活的数据交互。
允许开发者通过 Mustache 变量绑定语法({{ }}
)直接在 SQL 查询中嵌入静态参数,同时也支持在运行时通过 $runSQL()
方法执行时动态传递参数,可以避免直接拼接字符串导致 SQL 注入的风险。
详情可参考 $runSQL
文档
注意这里要指定自己的MySQL数据连接器标识,否则会访问云数据库MySQL
原始模式 $runSQLRaw
在某些情况(例如动态表名等)下可能希望关闭预编译模式,我们也支持直接传入原始的 SQL 语句的方式来执行 SQL,这种情况下需要自行处理 SQL 注入的防范。
详情可参考 $runSQLRaw
文档
注意这里要指定自己的MySQL数据连接器标识,否则会访问云数据库MySQL
SQL 注入防范
在使用 $runSQLRaw
原始模式时,由于 SQL 语句会被当做原始字符串进行查询,因此开发者需要自行确保 SQL 语句的安全性,避免 SQL 注入的风险。以下是一些防范 SQL 注入的措施:
使用预编译模式:如非必要,优先使用
$runSQL
预编译模式,利用参数化查询来避免 SQL 注入。对用户输入进行验证:在将用户输入的数据用于 SQL 语句之前,进行严格的验证和过滤,确保输入数据的合法性。
使用白名单验证:对于用户可以输入的值,使用白名单来验证,只允许预定义的安全值。
转义特殊字符:对于无法使用参数化查询的情况,确保对用户输入的数据进行转义,特别是 SQL 语句中的特殊字符,如单引号
'
。错误处理:合理处理数据库查询错误,避免将详细的错误信息暴露给用户,这可能会泄露数据库结构信息,增加 SQL 注入的风险