Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 设置MySQL数据库中行的唯一ID_Php_Mysql_Sql - Fatal编程技术网

Php 设置MySQL数据库中行的唯一ID

Php 设置MySQL数据库中行的唯一ID,php,mysql,sql,Php,Mysql,Sql,我想为添加到数据库中的每个项目设置一个唯一的ID,类似于Drupal节点。只是不知道在数据库中添加新项目时,我如何知道下一个数字。 MySQL状态是: $query = "INSERT INTO `HERDSIRES`(uid, name, color, gender) VALUES ( VALUE of next uid, '$name', '$color', '$gender')"; 我想我需要在插入之前查询数据库,找出最后一个uid的值,然后向其中添加1,然后将其保存到变量中。我只是不

我想为添加到数据库中的每个项目设置一个唯一的ID,类似于Drupal节点。只是不知道在数据库中添加新项目时,我如何知道下一个数字。 MySQL状态是:

$query = "INSERT INTO `HERDSIRES`(uid, name, color, gender) VALUES ( VALUE of next uid, '$name', '$color',  '$gender')";
我想我需要在插入之前查询数据库,找出最后一个uid的值,然后向其中添加1,然后将其保存到变量中。我只是不确定这是不是最好的办法


有什么想法吗

如果该列被数据库设置为自动生成,您只需在
INSERT
语句中传递
null
,MySQL将完成其余操作

例如,在指定了
auto_increment
的主键列上

你的建议是:

INSERT INTO `HERDSIRES`(uid, name, color, gender) 
VALUES ( null, '$name', '$color',  '$gender')";
或者您可以完全忽略它,因为您正在枚举字段:

INSERT INTO `HERDSIRES`(name, color, gender) 
VALUES ( '$name', '$color',  '$gender')";
编辑:下面介绍如何使用PHP从表中获取最后一个自动生成的ID:

$query = mysql_query('INSERT INTO ...');
$new_row_id = mysql_insert_id();

// do something with $new_row_id

是否有任何原因使您不能使用
autoincrement
?SQL将自动为您处理该问题。

将表中的字段设置为自动递增,然后在插入时不要设置字段。

查看:

最 最近生成的ID在中维护 基于每个连接的服务器。 它不会被其他客户端更改。 如果您更新,它甚至不会更改 另一列带有 非magic值(即 不为NULL且不为0)。使用 最后一次插入ID()并自动递增 同时从多个 客户是完全有效的。每个 客户端将接收最后插入的 该客户端上一条语句的ID 执行


对不起,我漏掉了这个。我将同一项目的不同部分添加到不同的表中。在调用来自不同表的所有数据时,我将使用此UID。在这种情况下,您希望在插入第一行后使用
mysql\u insert\u id()
,然后在下一个或多个查询中使用该值。该PHP函数是另一个答案中提到的MySQL函数
LAST\u INSERT\u ID()
的代理。我更新了上面的答案以包含这一点。当使用InnoDB时,要小心MySQL中的自动增量。如果要将项目的数据插入到不同的表中,是否可以使用LAST_INSERT_ID()。(抱歉,我遗漏了这一点)因此一个表将只包含名称、添加的日期和UID,另一个表将包含UID和其余信息。LAST_INSERT_ID()用于自动增量列。LAST_INSERT_ID()返回自动生成的第一个值,该值是最近执行的INSERT或UPDATE语句为自动增量列设置的,以影响此类列。如果使用InnoDB,则自动增量在MySQL中非常可怕。它不会在服务器重新启动之间保留最后一个记录值。因此,如果从500条记录开始,删除100条随机记录,然后重新启动MySQL,MySQL将通过计算当前记录数+1来重新计算下一条记录数。换句话说,如果不采取步骤保留AUTO_INCREMENT变量并在重新启动时恢复它(对于任何使用AUTO_INCREMENT的表),那么AUTO_INCREMENT在MySQL中是个坏主意。