PHP MySQLi-在插入或更新之后插入\u id 0-我应该先阅读吗?
我还是个新手,一些正确的编码实践让我不知所措。关于这一特殊情况的文件很薄弱,因此我想从各位专家那里得到一些建议:)关于以下方面 我有一个API,允许用户在一次调用中更新2个表。一个是汇总表,另一个是明细表,其中FK指向汇总表 我让我的代码做的是,我向摘要表执行UPSERT(插入/更新),获取PHP MySQLi-在插入或更新之后插入\u id 0-我应该先阅读吗?,php,mysql,mysqli,insert-update,Php,Mysql,Mysqli,Insert Update,我还是个新手,一些正确的编码实践让我不知所措。关于这一特殊情况的文件很薄弱,因此我想从各位专家那里得到一些建议:)关于以下方面 我有一个API,允许用户在一次调用中更新2个表。一个是汇总表,另一个是明细表,其中FK指向汇总表 我让我的代码做的是,我向摘要表执行UPSERT(插入/更新),获取insert\u id,然后从详细信息表中删除记录,然后插入我需要的记录(当然,用fk引用摘要) 但是,在摘要数据没有更改的情况下,insert\u id返回0。这似乎是意料之中的,因为没有更新/插入任何行
insert\u id
,然后从详细信息表中删除记录,然后插入我需要的记录(当然,用fk引用摘要)
但是,在摘要数据没有更改的情况下,insert\u id
返回0
。这似乎是意料之中的,因为没有更新/插入任何行
所以我的问题是:
在此更新/删除/插入尝试之前,我是否应该对表进行完整读取并比较数据?或者,是否有另一种巧妙的方法来获取摘要的id
,它是UPSERT尝试的副本?我觉得我的用户在使用这个API时“几乎”总是在更改摘要和详细数据
这里正确的编码实践是什么?每次额外阅读都值得吗?或者,如果插入id=0,我应该只读吗
想法?我最大的问题是,我不知道读和写的大小差异在这里是什么——特别是因为我不相信在不改变值的情况下API会被调用很多
同样,我的选择是:
- 读取db并进行比较,查看是否存在差异
- 相应插入/更新
- 尝试插入/更新
- 如果(insert_id=0),则读取db以获取详细信息表的摘要id
- 科姆莱特过程
- 尝试插入/更新
- 用什么?获取重复记录(并阻止插入/更新)的摘要id
- 使用id完成步骤
在我工作过的公司,如果你想逐个记录比较,我通常会使用选项1。这可以在存储过程或代码本身中实现。取决于“相同”的含义。如果是原始值,那么sql可能是最简单的。如果除了数据库所具有的内容之外还有一个上下文,那么您将希望在代码级别执行该操作。希望有帮助 如果您需要的id是一个自动递增字段,则选项4(使用1个执行操作在DB内执行所有操作)将在100%的时间内执行。这是您需要的一般SQL结构:
在重复密钥更新中插入摘要(primaryKey,fieldA,fieldB)值(NULL,valueA,valueB)primaryKey=LAST\u Insert\u ID(primaryKey),fieldA=fieldA,fieldB=fieldB代码>
如果执行选择LAST\u INSERT\u ID()
操作,它将为您提供成功插入的ID,或者如果重复,则提供重复的entrie ID。因此,请执行以下操作:
delete from detail,其中summary_id=LAST_INSERT_id()代码>请重新阅读。说文档很薄弱可能是一个错误。然而,我很挣扎,可能是因为我不知道该找什么。