我有一个变量$ 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'";
更新数据库的最佳方法是什么,我应该将字符串拆分为数组,然后为每个循环执行一次操作?还是有更好的方法?
答案 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注入)。