【问题标题】:MySQL How to update a record using two encrypted fields in the WHEREMySQL 如何使用 WHERE 中的两个加密字段更新记录
【发布时间】:2019-02-02 13:48:27
【问题描述】:

不确定这是否可行,但如果可以的话,我想一步一步完成。如果我传入的值与其他两个加密的字段匹配,我想更新字段 3。这是我所拥有的不起作用的东西......

UPDATE tbl 
SET field3=CONCAT(field3, 'some additional value') 
WHERE field1 = ENCRYPTION_APPROACH('my_value_in_the_clear', ENCRYPTION_SETTINGS) AND 
field2 = ENCRYPTION_APPROACH('my_other_value_in_the_clear', ENCRYPTION_SETTINGS);

字段 1 和 2 不是键,但以编程方式保证它们是唯一的。加密似乎正在工作,我可以使用相同的方法最初插入记录,然后再选择它。但是,当我使用经过验证的测试数据运行此程序时,我得到“0 行受影响”,并且没有错误消息。

我可以做一个复合调用,我首先用同样的方法选择记录,然后用它的键更新它(它适用于不同的调用)。但如果可以的话,我真的很想把这一步保持下去。想法?

【问题讨论】:

    标签: mysql sql encryption sql-update


    【解决方案1】:

    啊哈!

    环顾四周后,我找到了真正的解决方案。任何时候你有一个 CONCAT 并且一些记录失败了,使用这个小技巧......

    UPDATE tbl 
    SET field3=IFNULL(CONCAT(field3, 'some additional value'), 'some additional value')
    WHERE field1 = ENCRYPTION_APPROACH('my_value_in_the_clear', ENCRYPTION_SETTINGS) AND 
    field2 = ENCRYPTION_APPROACH('my_other_value_in_the_clear', ENCRYPTION_SETTINGS);
    

    失败的不是加密……而是当 CONCAT 第一次作用于空字段时,它返回了一个空值。这个小技巧可以让您在第一次尝试连接前一个值时成功,并适用于所有后续调用!

    【讨论】:

      猜你喜欢
      • 2013-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-11
      • 2022-06-15
      • 2012-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多