当我在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可以重复。
谢谢!
答案 0 :(得分:5)
您的数据库类是否包含获取最后一个插入ID的函数?否则请尝试使用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)
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();
}
}