MySQL SELECT 然后立即更新并仅返回选择

时间:2021-02-08 10:41:49

标签: php mysql pdo

'SELECT prod_id FROM prod_keys WHERE key_value = ? AND key_used IS NULL; UPDATE prod_keys SET key_used = CURRENT_TIMESTAMP() WHERE key_value = ?;'

我需要验证密钥是否有效(存在但未使用),将其标记为已使用(使用当前时间戳)并让它返回其产品 ID(它所属的产品)。

在 PHP 中使用 PDO 和 MySQL 新手执行此操作。

虽然这在某种程度上有效,但我需要:

  1. 确保这两个操作同时发生(而不是分开),
  2. 简化这一点,key_value 只需要传递一次,
  3. 最多只返回 prod_id

带有随机样本密钥的表:

CREATE TABLE `prod_keys` (
  `key_id` int(11) NOT NULL,
  `key_value` varchar(50) COLLATE utf8mb4_general_ci NOT NULL,
  `prod_id` int(11) NOT NULL,
  `key_used` datetime DEFAULT NULL,
  `key_created` datetime DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
INSERT INTO `prod_keys` (`key_id`, `key_value`, `prod_id`, `key_used`, `key_created`) VALUES
(1, 'ABCDE-ABCDE', 3, '2021-02-08 11:29:34', '2021-02-06 11:27:55'),
(2, 'YXCVB-YXCVB', 4, NULL, '2021-02-06 11:27:55'),
(3, 'NCZVG-XEQJH', 7, NULL, '2021-02-08 11:27:55'),
(4, 'S1JS0-UYYGA', 3, NULL, '2021-02-08 11:27:55'),
(5, '4DHQ9-CHY4L', 5, NULL, '2021-02-08 11:27:55'),
(6, '0DDQG-ZOP3A', 7, NULL, '2021-02-08 11:27:55'),
(7, '1TPSK-XBDYW', 3, NULL, '2021-02-08 11:27:55'),
(8, 'M2UEB-7O15L', 4, NULL, '2021-02-08 11:27:55'),
(9, 'VWAV2-3728O', 6, NULL, '2021-02-08 11:27:55'),
(10, '6215O-O94Y5', 5, NULL, '2021-02-08 11:27:55'),
(11, 'R22QT-9PQ0O', 4, NULL, '2021-02-08 11:27:55'),
(12, '47MIF-7HG96', 5, NULL, '2021-02-08 11:27:55');

0 个答案:

没有答案
相关问题