我需要做什么(如果有的话)来确保 $mdb2->lastInsertID() 返回该连接的自动增量值?
我最近从 SQL Server 切换到 MySQL,但在任何地方都找不到这个问题的足够可靠的答案:
我在需要锁定的表上使用 PHP、MySQL 和 InnoDB 表引擎。因此,对于包含 3 个语句的标准系列:
- Insert into table A
- $id = $mdb2->lastInsertID()
- Insert into table B (name, fk) VALUES ('foo', $id)
我需要采取哪些步骤确保 $id 具有步骤 1 中插入的值?就这样好吗?一切都需要在交易中吗?我是否需要添加其他查询来锁定和释放表?
谢谢你们。
I've made the switch recently from SQL Server to MySQL, and I can't find a solid enough answer to this question anywhere:
I'm using PHP, MySQL, and the InnoDB table engine on the tables I need to lock. So for a standard series of 3 statements:
- Insert into table A
- $id = $mdb2->lastInsertID()
- Insert into table B (name, fk) VALUES ('foo', $id)
what steps do I need to take to make sure $id has the value of the insert from step 1? Is it fine the way it is? Does everything need to be in a transaction? Do I need to add other queries to lock and release the tables?
Thanks guys.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
你应该/可以,但你不需要做任何事情:
信息函数,function_last-insert-id
You should/could, but you don't NEED to do anything:
information-functions , function_last-insert-id
如果任何查询失败,最好使用事务,至少可以回滚其他更新。
或者自己处理
如果步骤 3 失败,您将收到来自 mysql 的错误消息,将该消息存储在变量中并检查是否收到删除在步骤 1 中插入的记录。
这就是事务处理的全部内容。你应该使用交易。
Better to use transaction if any query fails at least other updates can be rolled back.
OR handle by yourself
If the step 3 fails you will receive error message from mysql store that message in variable and check for that if received delete the record inserted in 1 step.
That is all what transaction handle. You should use transaction.