我正在使用Sql-Server和Postgresql,通常当我需要运行多个命令时,我会打开一个新的连接,并且foreach所需的查询任务会运行一个命令(例如,插入1000行)。
如果我在单个命令中运行多个查询命令(查询以逗号分隔)与以前的行为相比,是否不好?
答案 0 :(得分:0)
在一个调用中运行多个命令(并且能够执行)使您极易受到SQL注入的攻击。如果有人之后可以附加UPDATE
或DELETE
语句,则任何查询(甚至是简单的SELECT)都将变得危险。这就是为什么许多实现(尤其是来自PHP)只是抑制提交嵌套查询的能力的原因。
据我所知,几乎没有正当理由这样做。通常情况下,连接保持打开状态,则呼叫本身所隐含的开销可以忽略不计。
如果您寻求的实际上是原子性,那么您想尝试“交易”;
如果您担心查询的复杂性并且不想每次都重新解析它们,则可以看一下“ prepared statement”和存储过程(或“ functions”)。使用最新版本的PostGreSQL)。