MySQL Как обновить запись, используя два зашифрованных поля в ГДЕ - PullRequest
0 голосов
/ 28 августа 2018

Не уверен, что это возможно, но я бы хотел сделать это за один шаг, если смогу. Я хотел бы обновить поле 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 строк», и никаких сообщений об ошибках.

Я могу просто сделать составной вызов, где я сначала выбираю запись с помощью того же подхода, а затем обновляю ее по ключу (который работает для другого вызова). Но я бы очень хотел, чтобы это было на шаг, если смогу. Мысли

1 Ответ

0 голосов
/ 28 августа 2018

Aha!

После осмотра я нашел РЕАЛЬНОЕ решение. Каждый раз, когда у вас есть 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 впервые воздействовал на нулевое поле, он возвращал нулевое значение. Этот маленький трюк поможет вам преодолеть первый раз, когда вы попытаетесь объединить предыдущее значение, и сработает для всех последующих вызовов!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...