繁体   English   中英

mysql_insert_id()的行为

[英]Behavior of mysql_insert_id()

我正在使用来自php库的函数,它mysql_insert_id()使用mysql_insert_id() 现在我修改了一些将数据插入表中的函数,以便明确指定主键值,例如,当表最初有10行时,我插入ID = 300的行,后面跟ID = 200的行。 我想知道mysql_insert_id是否会按预期运行,即返回我为AUTO_INCREMENT PRIMARY KEY列明确指定的值。

表:

CREATE TABLE `foo` (
  `id` int(11) NOT NULL auto_increment,
  `value` varchar(32) NOT NULL,
  PRIMARY KEY  (`id`)
) ;

码:

print phpversion()."\n";
mysql_connect('localhost','user','pass');
mysql_select_db('database');

mysql_query('INSERT INTO `foo` (`id`,`value`) VALUES(100,"bar")');
print var_export(mysql_insert_id())."\n";

mysql_query('INSERT INTO `foo` (`value`) VALUES("zoid")');
print var_export(mysql_insert_id())."\n";

mysql_query('INSERT INTO `foo` (`id`,`value`) VALUES(99,"yargh")');
print var_export(mysql_insert_id())."\n";

$q = mysql_query('SHOW TABLE STATUS LIKE "foo"');
$status = mysql_fetch_assoc($q);
mysql_free_result($q);
print $status['Auto_increment']."\n";

mysql_query('INSERT INTO `foo` (`value`) VALUES("whatever")');
print var_export(mysql_insert_id())."\n";

输出:

5.2.XX-0.dotdeb.1
100
101
99
102
102

TL / DR版本:它返回最后一个id,无论是自动递增还是显式给定。

更新:根据Mchl的建议添加了id < 100 INSERT

答案是肯定的,

它将返回您输入的值。 我喜欢这个问题,所以我实际上在多个配置不同的服务器中尝试了多次。

它会返回你插入的值,

mysql_insert_id()返回auto_increment feild的值,不需要自动生成。

如果您尝试为密钥提供dupilcate值,它也将返回0,因为它不会正确插入。

如果您想尝试,请使用以下查询

--EDIT ..有更多插入

<?php
$link = mysql_connect('localhost', 'root', 'techping');
if (!$link) {
    die('Could not connect: ' . mysql_error());
}
mysql_select_db('test');

mysql_query("INSERT INTO test (id, name) values (100,'kossu')");
printf("Last inserted record has id %d<br />", mysql_insert_id());
mysql_query("INSERT INTO test (id, name) values (125,'kossu')");
printf("Last inserted record has id %d<br />", mysql_insert_id());
mysql_query("INSERT INTO test (id, name) values (121,'kossu')");
printf("Last inserted record has id %d<br />", mysql_insert_id());
mysql_query("INSERT INTO test (id, name) values ('','kossu')");
printf("Last inserted record has id %d<br />", mysql_insert_id());
mysql_query("INSERT INTO test (id, name) values (250,'kossu')");
printf("Last inserted record has id %d<br />", mysql_insert_id());
?>

结果:

Last inserted record has id 100 
Last inserted record has id 125
Last inserted record has id 121
Last inserted record has id 126
Last inserted record has id 250

看看我让autoincrement在121之后产生id,它在最大id之后生成下一个值(126)(即本例中为125),而不是122

认为不会。 它应该返回0:

上次查询成功时为AUTO_INCREMENT列生成的ID,如果上一个查询未生成AUTO_INCREMENT值,则为0;如果未建立MySQL连接,则为FALSE。 - http://php.net/manual/en/function.mysql-insert-id.php

ID未生成,因此应返回0。

事实证明,实际情况并非如此。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM