我使用 PHP 在 MySQL 数据库中插入一条记录。如果记录是新的,我会得到 insert_id,但如果它已经存在,我无法使用单个查询获取 id。
以下两个查询都允许我添加记录或跳过记录(如果已存在):
INSERT INTO `emails` (`email`) VALUE ('<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="b2d3d0d1f2d7cad3dfc2ded79cd1dddf" rel="noreferrer noopener nofollow">[email protected]</a>') ON DUPLICATE KEY UPDATE `id`=`id`
INSERT IGNORE INTO `emails` (`email`) VALUE ('<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="6d0c0f0e2d08150c001d0108430e0200" rel="noreferrer noopener nofollow">[email protected]</a>')
在这两种情况下获得正确结果的正确方法是什么?
编辑:这是我的表格语法:
CREATE TABLE `emails` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`email` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
最佳答案
我怀疑是 LAST_INSERT_ID 的值最终出现在 insert_id 中。
引自MySQL手册;
要使 LAST_INSERT_ID() 对更新有意义,请按如下方式插入行:
INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), c=3;
来源:http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
关于php - (使用MySQL插入)当记录存在时找不到该记录的id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8826336/