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