为什么用go sql包使用预处理语句而不是Query / Exec?

时间:2015-01-14 17:03:37

标签: sql go

在go sql包中,我了解每个语句应该在执行后关闭。 为什么有人会使用预准备语句而不仅仅使用原始QueryExec方法?

2 个答案:

答案 0 :(得分:2)

Prepared语句已绑定到与DB的具体连接,包含低级driver.Stmt,可以通过多个go-routings同时使用。因此,准备和使用非常方便,而且工作更快。

答案 1 :(得分:2)

我认为最好的答案来自维基百科关于Prepared Statements的文章。

引用:

  

会产生编译和优化语句的开销   虽然声明多次执行,但只有一次。不是全部   可以在准备好的语句时执行优化   编译,有两个原因:最好的计划可能取决于具体的   参数的值,最佳计划可能会随表格而变化   索引随时间变化。输入代码

     

准备好的语句可以抵御SQL注入,因为   参数值,稍后使用不同的值传输   协议,无需正确转义。如果是原始声明   模板不是从外部输入派生的,SQL注入不了   发生。