处理后如何获取SQL查询ID?

时间:2010-02-05 23:41:32

标签: php sql mysql

这有点看起来很复杂,我想获得已处理查询的id列值。

示例:

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

我希望在将信息存储在数据库中后获取此查询的ID。

如果不可能,那么获取最后一个ID记录并添加1将是安全且可靠的吗?

注意:我使用PHP和mySQL

由于

7 个答案:

答案 0 :(得分:2)

答案 1 :(得分:2)

如果是auto_increment列,请使用PHP函数mysql_insert_id。

答案 2 :(得分:1)

如果你在PHP中使用标准的mysql,你所要做的就是使用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();
?>

答案 3 :(得分:1)

不,获取最高ID并添加1并将其用作新ID是不安全的。这就是众所周知的竞争条件。如果两个查询同时尝试执行此操作,则可能是它们都选择了SAME最高ID,两者都尝试添加1,然后BOTH尝试使用相同的id(这将是坏的)。

使用AUTO_INCREMENT字段要好得多,你可以按照以下方式在PHP中检索插入的id(来自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 ('kossu')");
printf("Last inserted record has id %d\n", mysql_insert_id());
?>

答案 4 :(得分:1)

以下是代码:

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

变量recent_id就是你要找的。

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

希望它有所帮助。

答案 5 :(得分:0)

希望这会有所帮助:

int mysql_insert_id ([ resource $link_identifier ] )

http://us3.php.net/mysql_insert_id

答案 6 :(得分:0)

检查here如果你使用mysqli for php

没问题