如何使用PHPForeach更新mysql数据库

如何使用PHPForeach更新mysql数据库,php,mysql,foreach,Php,Mysql,Foreach,我正在处理一个项目,当用户批准任务时(使用“批准”和“拒绝”单选按钮选项),必须更新具有相同任务id的所有数据库行。每个任务都有子任务,我希望更新子任务,而不仅仅是主任务。我不确定如何实现foreach条件。这是我的密码: foreach( $_POST['task_id'] as $id) { $ids = $id["pro_id"]; } $update = "UPDATE tasks SET for_checking = 'no', approved = 'yes' WHERE ta

我正在处理一个项目,当用户批准任务时(使用“批准”和“拒绝”单选按钮选项),必须更新具有相同任务id的所有数据库行。每个任务都有子任务,我希望更新子任务,而不仅仅是主任务。我不确定如何实现foreach条件。这是我的密码:

foreach( $_POST['task_id'] as $id) {
  $ids = $id["pro_id"];
}

$update = "UPDATE tasks SET for_checking = 'no', approved = 'yes' WHERE task_id = $ids";
我知道我的编码有问题,很抱歉。我希望有人能帮助我改进代码。或者有人告诉我除了使用foreach还有其他方法吗。这里是新手学生。提前谢谢

你应该做的是使用。在处理用户输入($\u POST,$\u GET)时,最好使用预先准备好的语句。准备好的语句可以保护您免受SQL注入的影响。您可以使用
mysqli
库,但我个人更喜欢PDO

下面是一些关于如何设置的示例代码:


如果所有值都相同,您甚至可能不需要
foreach
。在查询中使用
in()
运算符并内爆所有值。您应该参数化您的查询。正如
$ids=
在每次迭代时都会覆盖,所以变量只有一个值。缺少查询执行。。。另外,
$update
可能应该在foreach中。同样如上所述,使用参数化语句。@EugeneAnisiutkin但这将是非常缓慢和低效的。
foreach
在收音机上?这个问题不清楚。我们需要看到这个的HTML/表单
foreach
通常与复选框一起使用,而不是与收音机一起使用。收音机是“一个”选择,而不是多个。您还在每次迭代中覆盖
$ids
变量。虽然速度不快,但它是安全的。请注意,虽然可以灵活地构造一个使用IN()和参数的查询。我不会说只使用
用户输入
,这是执行第二级注入的方式。应绑定任何非静态值。(也许再加上
foreach
就不需要了)@草莓啊,我明白了,我的PHP比MySQL好-我忘了
中的
@在PDO绑定中,数组中的每个元素都需要自己的密钥吗?或者我可以这样做:赋值并将其设置为内爆($array,“)?@user3783243除了用户输入之外,什么是非静态的?
<?php
    $pdo = new \PDO('mysql:hostname=localhost;dbname=my_db', 'user', 'password');

    # we now have access to function in PDO! Happy days
    # we write your SQL outside the foreach loop
    $sql = 'update `table` set `field` = :value;';
    # prepare your statement
    $res = $pdo->prepare($sql);

    # loop through data
    foreach ($_POST['ids'] as $id)
    {
        $res->execute(array(':value' => $id));
    }

    # now we've done an SQL statement that's fast and safe!