一次更新多行。基于id

时间:2013-07-22 18:21:04

标签: php mysql sql

我有一个变量$ 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'";

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

3 个答案:

答案 0 :(得分:3)

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

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

现在,为了避免SQL注入攻击,这显然取决于你,你需要爆炸该数组并发送多个这样的更新语句:

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

答案 1 :(得分:2)

在这里使用IN条款没有任何内在错误。任何WHERE子句都适用于UPDATE语句。您只想将数字视为值列表而不是字符串。像这样:

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

真正重要的部分是您首先将$ids值到查询中。您没有在问题中显示,但您需要确保自己没有打开SQL注入漏洞。确保您正确地清理输入并使用准备好的语句。准备语句如何处理值列表与单个值取决于所使用的数据访问技术。

答案 2 :(得分:0)

使用此查询:

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

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