Php 如何防止弄错身份证

Php 如何防止弄错身份证,php,mysql,database,primary-key,Php,Mysql,Database,Primary Key,数据库=mysql语言=php 我正在编写这样的程序 PC1=计算机1 台阶 1.PC1插入数据,自动递增的新ID 2.PC1选择最后一个ID 一切正常,但 当你的代码在同一毫秒内被多台计算机使用时的问题。 比如说 PC1插入数据,自动递增新ID 2.PC2插入数据,自动递增新ID 3.PC1选择您应该使用的最后一个ID或您正在使用的API的等效调用,以获取最后插入行的ID 我想象你现在正在这样做: SELECT MAX(id) FROM yourtable 除非您使用事务,否则这将不起作用。

数据库=mysql语言=php

我正在编写这样的程序

PC1=计算机1

台阶

1.PC1插入数据,自动递增的新ID

2.PC1选择最后一个ID

一切正常,但

当你的代码在同一毫秒内被多台计算机使用时的问题。 比如说

PC1插入数据,自动递增新ID 2.PC2插入数据,自动递增新ID

3.PC1选择您应该使用的最后一个ID或您正在使用的API的等效调用,以获取最后插入行的ID

我想象你现在正在这样做:

SELECT MAX(id) FROM yourtable
除非您使用事务,否则这将不起作用。但是使用函数mysql\u insert\u id是更好的方法

在文档中,还有一个警告和一些注意事项,您应该阅读:

注意:mysql_insert_id将本机mysql C API函数mysql_insert_id的返回类型转换为PHP中的长名int类型。如果自动增量列的列类型为BIGINT 64位,则转换可能会导致不正确的值。相反,在SQL查询中使用内部MySQL SQL函数LAST\u INSERT\u ID

注意:由于mysql\u insert\u id作用于上次执行的查询,因此请确保在生成值的查询之后立即调用mysql\u insert\u id

注意:MySQL SQL函数LAST_INSERT_ID的值始终包含最近生成的自动增量值,并且不会在查询之间重置

您应该对正在使用的API使用或等效调用来获取最后插入行的ID

我想象你现在正在这样做:

SELECT MAX(id) FROM yourtable
除非您使用事务,否则这将不起作用。但是使用函数mysql\u insert\u id是更好的方法

在文档中,还有一个警告和一些注意事项,您应该阅读:

注意:mysql_insert_id将本机mysql C API函数mysql_insert_id的返回类型转换为PHP中的长名int类型。如果自动增量列的列类型为BIGINT 64位,则转换可能会导致不正确的值。相反,在SQL查询中使用内部MySQL SQL函数LAST\u INSERT\u ID

注意:由于mysql\u insert\u id作用于上次执行的查询,因此请确保在生成值的查询之后立即调用mysql\u insert\u id

注意:MySQL SQL函数LAST_INSERT_ID的值始终包含最近生成的自动增量值,并且不会在查询之间重置

在mysql中,如果您调用

选择最后一个插入ID

您将获得当前连接的最后一个自动生成的id,而不是整个服务器的id。因此,如果在另一个连接中创建了另一条记录,那么如果调用

选择最后一个插入ID


您将获得当前连接的最后一个自动生成的id,而不是整个服务器的id。因此,如果在另一个连接中创建了另一条记录,它将不会影响LAST_INSERT_ID返回的结果。

MySQL将在每个客户端计算机连接的任何INSERT语句之后立即返回正确的LAST INSERT ID,因此您不必担心这一点;服务器不会把它们混在一起。从:

每个客户机将收到客户机执行的最后一条语句的最后一个插入ID


只要在PHP代码中调用mysql\u insert\u id来检索insert id,就没有什么可担心的。

mysql将在每个客户端计算机连接的insert语句之后立即返回正确的最后一个插入的id,因此您不必担心这一点;服务器不会把它们混在一起。从:

每个客户机将收到客户机执行的最后一条语句的最后一个插入ID

只要在PHP代码中调用mysql\u insert\u id来检索insert id,就没有什么可担心的。

mysql有这个功能

如果您使用经典的mysql函数,则PHP等效于此函数,但该函数应在INSERT查询之后立即调用,因为它作用于最后一个查询

这些功能基于每个连接工作,不会受到其他客户端插入的记录的影响。

mySQL具有此功能

如果您使用经典的mysql函数,则PHP等效于此函数,但该函数应在INSERT查询之后立即调用,因为它作用于最后一个查询


这些函数在每个连接的基础上工作,不会受到其他客户端插入的记录的影响。

您可以发布关于如何获取最后一个id的代码吗?我还没有完成代码,我只是认为在编写代码时可能会导致问题。您可以发布关于如何获取最后一个id的代码吗?我还没有完成代码,我只是认为在编写代码时可能会出现问题。根据所选的连接,PDO::lastInsertID/mysqli_insert_id。但实际上这个值是会话安全的
ugh:根据文档,mysql的插入id应该在插入查询之后立即调用,而mysql的最后一个插入id可以在以后调用,只要它是相同的连接。我已经将文档中的警告添加到我的答案中。或者PDO::lastInsertID/mysqli插入id取决于选择的连接。但是这个值确实是会话安全的。不过要小心:根据文档,mysql的insert\u id应该在insert查询之后立即调用,而mysql的最后一个insert\u id可以在以后调用,只要它是相同的连接。我已经将文档中的警告添加到我的答案中。