获取最后一个插入ID

时间:2010-10-25 14:33:45

标签: php cakephp cakephp-1.3

您好我正在使用cakePHP 1.3,我无法检索最后插入的行的ID。我实际上使用$ this-> Model-> id来检索最后插入的ID,但我无法获取id。当试图检查什么是返回类型时,它表示为bool(false),这意味着什么都没有返回。

这里我在不同的控制器中加载不同的模型,那么问题是什么?但即使我正在装载,我什么都没有回来!!

$this->loadModel('Contact');
$this->Contact->query("insert into contacts(tblContact_firstName,tblContact_lastName,tblContact_company,tblContact_department,tblContact_address,tblContact_country,tblContact_city,tblContact_state,tblContact_zipcode,tblContact_phone1,tblContact_email1) values('$sanitizedFormData[fname]','$sanitizedFormData[lname]','','$sanitizedFormData[company]','$sanitizedFormData[address]','$sanitizedFormData[country]','$sanitizedFormData[city]','$sanitizedFormData[state]','$sanitizedFormData[zip]','$sanitizedFormData[phone]','$sanitizedFormData[email]');");

$this->loadModel('Contact');
$contactId = $this->Contact->id;

当我以递归方式打印$ this-> Contact数组时,我发现“id”键的值为空。这就解释了为什么我收到一个空值。

现在根据我的情况,我如何得到最后插入的id,特定于控制器Contact?

4 个答案:

答案 0 :(得分:8)

答案 1 :(得分:4)

如果这是MySQl,您可以使用“从联系人LAST_INSERT_ID()中查询”查询来获取最后一个ID。 或者只是“SELECT LAST_INSERT_ID()”

对于MSSQL,它是“SELECT @@ IDENTITY”。

这绕过了cakePHP中的任何解决方案,因此可能有更好的解决方案。

答案 2 :(得分:4)

当你使用query()时,你会失去很多自动蛋糕提供的功能。请改用save()

事实上,在这种情况下,您甚至不需要加载联系人。您可以使用query()从当前控制器执行任何查询,甚至可以保存到任何其他表。

如果您当前的模型与联系人(loadModel())有某种关联,您也可以避免使用$this->CurrentModel->AnotherOne->Contact->save(...)

答案 3 :(得分:2)

您可以通过

获取last inserted record id
echo $this->ModelName->getLastInsertID();

或者,您可以使用:

echo $this->ModelName->getInsertID();

此方法可在第2775行的cake / libs / model / model.php中找到

注意:如果您手动运行插入查询,则此功能不起作用

相关问题