这有点看起来很复杂,我想获得处理后的查询的id列值。我如何在处理它后获取SQL查询ID?
例如:
$qu = mysql_query("INSERT INTO msgs (msg,stamp) VALUES('$v1','$v2')");
我想存储在数据库中的相关信息后,让该查询的ID。
如果不可能,获取最后的ID记录并添加1将是安全和保证的?
注:我使用PHP和MySQL
感谢
这有点看起来很复杂,我想获得处理后的查询的id列值。我如何在处理它后获取SQL查询ID?
例如:
$qu = mysql_query("INSERT INTO msgs (msg,stamp) VALUES('$v1','$v2')");
我想存储在数据库中的相关信息后,让该查询的ID。
如果不可能,获取最后的ID记录并添加1将是安全和保证的?
注:我使用PHP和MySQL
感谢
如果使用标准的MySQL在PHP中,你所要做的,就是用mysql_insert_id()
这需要资源$link
作为参数(你的MySQL连接)
http://php.net/manual/en/function.mysql-insert-id.php
基本用法:
<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db('mydb');
mysql_query("INSERT INTO mytable (product) values ('some product')");
echo 'Last inserted record has id of ' . mysql_insert_id();
?>
下面是关于这个MySQL的文档。
http://dev.mysql.com/doc/refman/5.1/en/getting-unique-id.html
如果它是一个AUTO_INCREMENT列,使用PHP函数mysql_insert_id。
检查here如果它`不适合你使用的mysqli为PHP
不,这是不安全的抢最高的ID,只是加1并使用它作为新的ID问题。这就是所谓的竞赛条件。如果两个查询同时尝试执行此操作,则可能是它们都选择了SAME最高的ID,都尝试添加1,然后BOTH尝试使用相同的ID(这会很糟糕)。
这是更好的使用AUTO_INCREMENT字段,你这样做,你可以为(从http://php.net/manual/en/function.mysql-insert-id.php)如下检索在PHP中插入ID:
<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db('mydb');
mysql_query("INSERT INTO mytable (product) values ('kossu')");
printf("Last inserted record has id %d\n", mysql_insert_id());
?>
下面的代码:
$qu = mysql_query("INSERT INTO msgs (msg,stamp) VALUES('$v1','$v2')");
$recent_id = mysql_insert_id();
变量recent_id是你正在寻找的。
获取最后的ID记录并添加1可能不安全,不保证。如果你真的想要安全起见,你最好使用我指出的解决方案。
希望它有帮助。