Php 在一个sql查询中更新多行
当向客户发送提醒时,我必须为客户列表更新任意数量的行。我可以通过foreach循环来实现这一点,但我确信一定有一种方法可以通过on-query实现这一点 这就是目前有效的方法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($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函数