在go sql
包中,我了解每个语句应该在执行后关闭。
为什么有人会使用预准备语句而不仅仅使用原始Query
或Exec
方法?
答案 0 :(得分:2)
Prepared语句已绑定到与DB的具体连接,包含低级driver.Stmt,可以通过多个go-routings同时使用。因此,准备和使用非常方便,而且工作更快。
答案 1 :(得分:2)
我认为最好的答案来自维基百科关于Prepared Statements的文章。
引用:
会产生编译和优化语句的开销 虽然声明多次执行,但只有一次。不是全部 可以在准备好的语句时执行优化 编译,有两个原因:最好的计划可能取决于具体的 参数的值,最佳计划可能会随表格而变化 索引随时间变化。输入代码
准备好的语句可以抵御SQL注入,因为 参数值,稍后使用不同的值传输 协议,无需正确转义。如果是原始声明 模板不是从外部输入派生的,SQL注入不了 发生。