在Golang中如何为静态SQL查询的@date_of_birth传值
为SQL语句中的@date_of_birth参数传递值的方法
你这段是Go语言中的参数化SQL查询场景,正确传递参数的方式如下,同时能避免SQL注入风险:
方式1:直接调用Query方法传递参数
如果只执行一次查询,直接使用db.Query方法,将参数值作为后续参数传入即可,驱动会自动完成参数绑定:
import ( "database/sql" "time" ) _ "github.com/denisenkom/go-mssqldb" // 引入SQL Server驱动,根据你的数据库选择对应驱动 // 假设db是已初始化完成的*sql.DB实例 targetDOB := time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC) // 用time.Time匹配数据库datetime类型 rows, err := db.Query(strQuery, targetDOB) if err != nil { // 这里处理查询错误,比如日志打印、返回错误信息等 } defer rows.Close() // 后续遍历rows处理查询结果
方式2:预编译语句后执行
如果需要重复执行这条查询,先预编译语句可以提升执行效率:
stmt, err := db.Prepare(strQuery) if err != nil { // 处理预编译错误 } defer stmt.Close() targetDOB := "2000-01-01" // 如果数据库dob字段是字符串类型,可直接传字符串 rows, err := stmt.Query(targetDOB) if err != nil { // 处理执行错误 } defer rows.Close() // 处理查询结果
注意事项
- 绝对不要手动拼接SQL字符串传递参数,这会引入严重的SQL注入漏洞
- 参数类型要和数据库
dob字段类型匹配:比如数据库是datetime类型,用Go的time.Time传递最稳妥;如果是字符串类型,直接传符合格式的字符串即可 - SQL Server驱动(go-mssqldb)支持
@作为参数占位符,和你写的SQL语法完全兼容
内容的提问来源于stack exchange,提问作者John Scott
相关产品推荐
相关产品推荐

