2010-08-06 96 views
7

当我执行在MySQL控制台下面,它工作正常:通过PHP使用LAST_INSERT_ID()?

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选择新的标识,因为embed_code可以重复。

谢谢!

回答

4

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

http://nl.php.net/mysql_insert_id

+0

是的,你是对的。我使用的是PDO,它有一个'lastInsertId()'方法!我没有想到这一点。谢谢! – 2010-08-06 16:19:13

1

PHP有一个叫做mysql_insert_id的函数,它会给你与查询SELECT LAST_INSERT_ID();相同的结果。

0

这有专用功能 - 你不应该使用SQL版本,这是行不通的。

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

+0

它为什么不起作用? – iX3 2012-10-03 22:38:09

0

您可以尝试使用PHP的mysql_insert_id函数。

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

0

mysql_insert_id已弃用。所以我认为这个线程需要更新。

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']; 
} 
0

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

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