通过PHP使用LAST_INSERT_ID()?

时间:2010-08-06 16:10:24

标签: php mysql lastinsertid

当我在MySQL控制台中执行以下操作时,它可以正常工作:

INSERT INTO videos (embed_code) VALUES ('test code here');
SELECT LAST_INSERT_ID();

但是,当我通过PHP执行上述查询时,结果为空。

在数据抽象下,我使用的是名为DB的数据库访问类。这就是我通过PHP尝试上述查询的方法:

$embedCode = htmlentities($_POST['embed_code']);

//Insert video in database **WORKS**
DB::query("INSERT INTO videos (embed_code) VALUES ('$embedCode');");

//Retrieve id **DOES NOT WORK**
$row = DB::getSingleRow("SELECT LAST_INSERT_ID();");
$videoId = $row[0];

我不能通过embed_code选择新的id,因为embed_code可以重复。

谢谢!

7 个答案:

答案 0 :(得分:5)

您的数据库类是否包含获取最后一个插入ID的函数?否则请尝试使用mysql_insert_id()。

http://nl.php.net/mysql_insert_id

答案 1 :(得分:1)

PHP有一个名为mysql_insert_id的函数,它将为您提供与查询SELECT LAST_INSERT_ID();相同的结果。

答案 2 :(得分:0)

有专门的功能 - 您不应该使用SQL版本,因为它不起作用。

在MySQL库中,您应该使用mysql_insert_id函数,而mysqli对象具有insert-id属性。当然,这可能已经暴露在你正在使用的任何数据库类中。

答案 3 :(得分:0)

您可以尝试使用PHP的mysql_insert_id功能。

我认为发生的事情是每个DB::query调用都在不同的事务中,因此$row为空。也许您可以阅读DB:query文档以尝试在同一事务中运行两个调用。

答案 4 :(得分:0)

不推荐使用mysql_insert_id。所以我认为这个线程需要更新。

答案 5 :(得分:0)

自PHP 5.5.0起,

mysql_insert_id被标记为已弃用。

在此示例中,uid是表格视频的主键。

$row = DB::getMultipleRows("SELECT uid FROM videos WHERE uid=LAST_INSERT_ID();");
if (
    isset($row) &&
    is_array($row) &&
    isset($row['0']) &&
    is_array($row['0']) &&
    isset($row['0']['uid'])
) {
    $videoId = $row['0']['uid'];
}

答案 6 :(得分:0)

您应该将PDO的lastInsertId返回到您的类的外部。例如:

class DB
{
    public $last_insert_id;
    function x()
    {
        $stmt = $db->prepare($Query);
        $stmt->execute();
        $this->last_insert_id = $db->lastInsertId();
    }    
}