2010-02-05 67 views
2

这有点看起来很复杂,我想获得处理后的查询的id列值。我如何在处理它后获取SQL查询ID?

例如:

$qu = mysql_query("INSERT INTO msgs (msg,stamp) VALUES('$v1','$v2')"); 

我想存储在数据库中的相关信息后,让该查询的ID。

如果不可能,获取最后的ID记录并添加1将是安全和保证的?

注:我使用PHP和MySQL

感谢

回答

1

如果使用标准的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(); 
?> 
2

如果它是一个AUTO_INCREMENT列,使用PHP函数mysql_insert_id。

0

检查here如果它`不适合你使用的mysqli为PHP

1

不,这是不安全的抢最高的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()); 
?> 
1

下面的代码:

$qu = mysql_query("INSERT INTO msgs (msg,stamp) VALUES('$v1','$v2')"); 
$recent_id = mysql_insert_id(); 

变量recent_id是你正在寻找的。

获取最后的ID记录并添加1可能不安全,不保证。如果你真的想要安全起见,你最好使用我指出的解决方案。

希望它有帮助。