【发布时间】:2015-08-14 19:56:23
【问题描述】:
我的桌子是这样的:
ID - EMAIL - VERSION - LASTUPDATE
其中 id = 是自动递增和 Primary:
并且电子邮件是唯一的
所以每次有人使用我的应用程序时,它都会获取用户电子邮件并尝试插入,如果电子邮件已经存在,它会将行更新为 $version 和 $lastupdate 的新值
它几乎 100% 工作,它已经完美地更新了行,问题是当它执行更新时,仍然增加自动增量 id,所以下一个 INSERT 不会是 lastID 加一,而是另一个数字示例:
ID - EMAIL - VERSION - LASTUPDATE
-----------------------------------
1 - test1@... - 1.0 - currentTime();
如果 test2 加载我的应用程序,它将添加并且数据库将是:
ID - EMAIL - VERSION - LASTUPDATE
-----------------------------------
1 - test1@.. - 1.0 - currentTime();
2 - test2@.. - 1.0 - currentTime();
现在想象一下,test2 有了新版本,并且更新到了这个:
ID - EMAIL - VERSION - LASTUPDATE
-----------------------------------
1 - test1@.. - 1.1 - currentTime();
2 - test2@.. - 1.0 - currentTime();
完美,不是吗?所以当test3打开我的应用程序时问题就开始了,id不会是3,而是4,因为更新给id增加了1(我不知道为什么)
ID - EMAIL - VERSION - LASTUPDATE
-----------------------------------
1 - test1@.. - 1.1 - currentTime();
2 - test2@.. - 1.0 - currentTime();
4 - test3@.. - 1.1 - currentTime();
为什么在更新时增加ID的加一?我不要它=(
我的sql语法:
$sql = "INSERT INTO `backups`.`regs` (`email`, `version`, `lastupdate`) VALUES ('$email', '$version', '$lastupdate') ON DUPLICATE KEY UPDATE version='$version', lastupdate='$lastupdate'";
【问题讨论】:
-
你可以通过使用事务来实现
-
@BranimirĐurek 有什么教程吗?我不知道如何
-
这里是一个使用事务w3schools.com/php/func_mysqli_commit.asp的简单php示例。基本上,事务类似于 IF 状态。如果所有查询都成功执行,则提交更改,但如果您的查询之一失败,则什么也不做:)
-
我很想看看创建表并对此进行测试。这很奇怪
-
我现在记得这个问题并不奇怪,@BK435