我使用从使用mysql_insert_id()
飘飞一个PHP库函数。现在我修改了一些将数据插入到表中的函数,以便明确指定主键值,例如当表格最初有10行时,我插入ID = 300的行,然后插入ID = 200的行。我想知道如果mysql_insert_id将按预期行事,即返回我为AUTO_INCREMENT PRIMARY KEY列显式指定的值。行为mysql_insert_id()的
3
A
回答
4
表:
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,将它自动递增,或明确给出。
更新:增加INSERT
与id < 100
,如Mchl建议。
0
我不会
认为它会。它应该返回0:
上次查询成功时为AUTO_INCREMENT列生成的ID,如果上一个查询未生成AUTO_INCREMENT值,则为0;如果未建立MySQL连接,则为FALSE。 - 不产生http://php.net/manual/en/function.mysql-insert-id.php
的ID,因此应返回0
正如已经证明,在实践中这种情况并非如此。
+0
+1是的,和上面一样。 – Mike 2011-01-19 09:27:15
4
答案是肯定的,
它会返回你输入的值。我喜欢这个问题,所以我实际上在不同配置的多台服务器上尝试过多次。
就会返回你插入值,
的mysql_insert_id()返回AUTO_INCREMENT费尔德的价值,它不必是自动生成的。
它也将返回0,如果你试图为你的钥匙给dupilcate价值,因为它不会得到正确插入。
,如果你想尝试,然后用下面的查询
--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
看的时候让自动增量产生的ID 121之后,它产生最大的ID之后的下一个值(126)(即,在这种情况下125),而不是122
相关问题
- 1. mysql_insert_id()
- 2. php mysql_insert_id在多行上?
- 3. 为什么mysql_insert_id()返回0?
- 4. PHP的mysql_insert_id()为MySQL的UUID()主键?
- 5. Mysql_insert_id与Doctrine
- 6. mysql_insert_id和mysql_pconnect
- 7. mysql_insert_id()返回0
- 8. mysql_insert_id不工作
- 9. 与LAST_INSERT_ID()和mysql_insert_id()
- 10. mysql_insert_id()返回'0'
- 11. mysql_insert_id与更新
- 12. 依赖于“mysql_insert_id”
- 13. mysql_insert_id()不工作
- 14. 为什么PHP mysql_insert_id()返回零?
- 15. PostgreSQL的mysql_insert_id()的等价物?
- 16. php mysql_insert_id();不工作
- 17. mysql_insert_id()如何工作?
- 18. 帮我删除mysql_insert_id
- 19. mysql_insert_id返回奇数?
- 20. 错误mysql_insert_id()[MAIL TAG]
- 21. mysql_insert_id()返回的是什么?
- 22. mysql_insert_id和我的困境?
- 23. Php:相当于mysql_insert_id()的ingres
- 24. mysql_insert_id()很少返回0
- 25. 有关问题mysql_insert_id()应用
- 26. 是否mysql_insert_id线程安全?
- 27. mysql_insert_id()突然停止工作
- 28. mysql_insert_id()0,但插入成功
- 29. 你可以信任mysql_insert_id吗?
- 30. Mysql多重查询和mysql_insert_id()?
你ñ如果使用特定键插入,请正确使用auto_increment主键。 – 2011-01-19 09:18:40
是的,但...:) – 2011-01-19 14:24:57
如果有人想知道,我试图用`user_add`(http://wiki.phpbb.com/display/DEV/Function.user_add)函数同步我的用户和phpbb3用户表,并明确定义一个值为`user_id`确实起作用。 – 2011-01-19 14:38:15