Php 用一个查询更新多行

Php 用一个查询更新多行,php,mysql,prepared-statement,Php,Mysql,Prepared Statement,我有一张这样的桌子: optionId - optionName - optionValue 1 paypalEnv // empty right now 2 paypalClientId // empty right now 3 paypalSecret // empty right now 我想用1个查询更新所有行,如下所示:更新选项集paypalEnv=?,paypalClientId=?,

我有一张这样的桌子:

optionId - optionName    -   optionValue

1          paypalEnv         // empty right now
2          paypalClientId    // empty right now
3          paypalSecret      // empty right now

我想用1个查询更新所有行,如下所示:更新选项集paypalEnv=?,paypalClientId=?,paypalSecret=?

我想您正在寻找以下查询:

UPDATE options SET optionValue  = CASE
    WHEN optionName = 'paypalEnv' THEN value1
    WHEN optionName = 'paypalClientId' THEN value2
    WHEN optionName = 'paypalSecret' THEN value3
    ELSE optionValue
    END
WHERE optionId in (1,2,3)
您还可以将WHERE子句替换为以下内容:

WHERE optionName in ('paypalEnv','paypalClientId','paypalSecret')
或者,更简单地说

UPDATE options SET optionValue = 
CASE optionName 
WHEN 'paypalEnv'      THEN value1
WHEN 'paypalClientId' THEN value2
WHEN 'paypalSecret'   THEN value3
ELSE optionValue
END
WHERE optionId in (1,2,3)

如果您在
(optionId,optionName)
上有唯一或主键,则可以使用IODKU:

INSERT INTO options (optionId, optionName, optionValue) VALUES 
  (1, 'paypalEnv', ?)
  (2, 'paypalClientId', ?)
  (3, 'paypalSecret', ?)
ON DUPLICATE KEY UPDATE
  optionId    = VALUES(optionId),
  optionName  = VALUES(optionName),
  optionValue = VALUES(optionValue)

你试过了吗?没有WHERE子句的UPDATE将更新所有行。@aynber我知道我可以使用WHERE子句,但是我可以对多个ID使用WHERE子句吗?如果它们都是相同的值,则是。如果没有,那么我建议你给出下面的答案。然后你可以接受这个答案,很高兴能帮助你,从你的提问中获得乐趣;)我能知道这个查询叫什么吗?这是一个经典的“case-when-statement”更新,对于这样一个queryGood-old-IODKU没有特定的名称。