PDO lastinsertid
函数是否使用MySQL的last_insert_id
函数?
我对使用AWS
进行复制特别感兴趣,并且根据AWS manual使用某些MySQL函数中断复制:
其他可能导致复制错误的常见情况包括:...使用不安全的不确定性查询
mysql
manual指出,虽然我使用的功能实际上并不安全:
不确定功能不被认为不安全
我计划重写now()
的用法,但是由于PDO(而不是我)正在查询,因此我不确定如何避免使用last_insert_id
。我无法单独进行select
,因为很可能insert
是并行运行的,我将获得错误的ID。
答案 0 :(得分:2)
MySQL的LAST_INSERT_ID()
函数,各种绑定(如PDO的绑定)和基础功能是确定性的。您可以放心地使用它们。
例如,这是确定性的,并且可以在任何地方使用。
INSERT INTO master (address, town) VALUES('150 Broadway', 'New York');
INSERT INTO detail (master_id, item) VALUES (LAST_INSERT_ID(), 'pepperoni pizza');
不是。这是您要警惕的事情。
INSERT INTO master (address, town) VALUES('150 Broadway', 'New York');
SELECT @id := MAX(master_id) FROM master; /* bad bad bad */
INSERT INTO detail (master_id, item) VALUES (@id + 1 'pepperoni pizza');