2

我有一个变量, $ids 它是一个分隔字符串,所以它可以是 $ids = "1" 或 $ids = "1, 3, 7, 8"

我想要做的是根据这些值更新数据库,所以我有:

   $query = "UPDATE Fields SET Value = '1'   WHERE Id IN '$ids'";

并且:

   $query = "UPDATE Fields SET Value = '1'   WHERE Id '$ids'";

更新数据库的最佳方法是什么,我应该将字符串拆分为一个数组,然后为每个循环执行一个吗?或者,还有更好的方法?

4

3 回答 3

3

保存它对 SQL 注入非常开放的事实,这一行适用于一个或多个 id:

$query = "UPDATE Fields SET Value = '1'   WHERE Id IN ($ids)";

现在,为了让自己免受 SQL 注入攻击,这显然取决于您,您需要爆炸该数组并发送多个更新语句,如下所示:

$query = "UPDATE Fields SET Value = '1'   WHERE Id = :Id";
于 2013-07-22T18:23:22.467 回答
2

在这里使用IN子句本身并没有错。任何WHERE子句都适用于UPDATE语句。您只想将数字视为值列表而不是字符串。像这样的东西:

$query = "UPDATE Fields SET Value = '1' WHERE Id IN ($ids)";

真正重要的部分是首先如何$ids值放入查询中。您没有在问题中表明这一点,但您需要确保您没有向 SQL 注入漏洞敞开大门。确保您正确清理输入并使用准备好的语句。准备好的语句如何处理值列表与单个值取决于所使用的数据访问技术。

于 2013-07-22T18:25:10.530 回答
0

使用此查询:

$query = "UPDATE Fields SET Value = '1' WHERE Id IN ($ids)";

$ids应该在哪里格式化 als 1,2,3,4。不要忘记在执行前检查它们(SQL 注入)。

于 2013-07-22T18:24:59.067 回答