Php 在一个sql查询中更新多行

Php 在一个sql查询中更新多行,php,mysql,sql,Php,Mysql,Sql,当向客户发送提醒时,我必须为客户列表更新任意数量的行。我可以通过foreach循环来实现这一点,但我确信一定有一种方法可以通过on-query实现这一点 这就是目前有效的方法 foreach($customer_id_arr as $c) mysqli_query($con,"UPDATE crm_customers SET customer_reminded=1 WHERE customer_id=$c"); 如何在一个查询中做到这一点?您可以利用: mysqli_query($con,"U

当向客户发送提醒时,我必须为客户列表更新任意数量的行。我可以通过foreach循环来实现这一点,但我确信一定有一种方法可以通过on-query实现这一点

这就是目前有效的方法

foreach($customer_id_arr as $c) mysqli_query($con,"UPDATE crm_customers SET customer_reminded=1 WHERE customer_id=$c");
如何在一个查询中做到这一点?

您可以利用:

mysqli_query($con,"UPDATE crm_customers SET customer_reminded=1 WHERE customer_id IN (" . implode(",",$customer_id_arr) . ")";

值得一提的是,您可能完全可以不使用SQL注入。

这不是最好的数据转义方法,但您可以:

mysqli_query($con,"UPDATE 
    crm_customers 
  SET 
    customer_reminded=1 
  WHERE customer_id IN (".implode(',', array_map(function($c){return $con->real_escape_string($c);a},$customer_id_arr)).")");

假设您需要更新客户ID的1、2、3、4和5:

UPDATE crm_customers 
SET customer_reminded = 1 
WHERE customer_id IN (1, 2, 3, 4, 5)
您甚至可以在in子句中使用子查询。假设您希望在customer_Employed==0的所有记录上设置customer_Employed=1。比如:

UPDATE crm_customers SET customer_reminded = 1 
WHERE customer_id IN 
    (SELECT customer_id 
    FROM crm_customers 
    WHERE customer_reminded == 0)

使用SQL
Where customer\u id In(…)
模式是:
Where customer\u id In(1、2、3)
您很可能容易受到SQL注入的攻击。请使用事先准备好的声明!哦,哇,是的,当然,我应该解决这个问题!Thanks@Nick实际上最近才了解到这一点,但是
内爆
的参数可能会被交换(文档确实提到了它)。仍然是不好的做法,特别是因为
爆炸
不允许这样做,但要知道这可能是有用的:)@Jeto是的,你是对的,我已经把这些信息推到了我的脑海深处,因为这是一个坏习惯,我们都努力不让它们中的任何一个出现:-)@抱歉,正如Jeto所指出的那样,
内爆
将以任意顺序接受其参数。不要混合使用mysqli和mysql函数