<分区>
我正在使用 here 中描述的神奇的 last_insert_id 技巧, 但现在遇到了非确定性行为的问题。
PHP 代码大约每隔我运行一次就运行一次。这是在一个完全空闲的系统上(没有同时运行的生产)。
我在这里忘记了什么吗?可能是什么问题?
我的 PHP 代码:
$query = "UPDATE `session`
SET `date_access` = NOW(), someField = LAST_INSERT_ID(someField)
WHERE ID = :cookie LIMIT 1 ;";
$stmt = $dbh->prepare($query);
$stmt->bindParam(':cookie', $_COOKIE['x']);
if ($stmt->execute()) {
$count = $stmt->rowCount();
if ($count == 1) {
$result = $dbh->lastInsertId();
}
}
代码每次都使用现有的“cookie”值运行,但每次代码运行时 $count 都是 0(而不是 1)。
这是表格:
SET NAMES utf8;
SET time_zone = '+00:00';
SET foreign_key_checks = 0;
SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
SET NAMES utf8mb4;
DROP TABLE IF EXISTS `session`;
CREATE TABLE `session` (
`ID` char(50) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
`date_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`date_access` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`someField` bigint(20) unsigned NOT NULL,
UNIQUE KEY `ID` (`ID`),
KEY `someField` (`someField`),
CONSTRAINT `session_ibfk_2` FOREIGN KEY (`someTable`) REFERENCES `someTable` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;