Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取最后一个插入id_Php_Cakephp_Cakephp 1.3 - Fatal编程技术网

Php 获取最后一个插入id

Php 获取最后一个插入id,php,cakephp,cakephp-1.3,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

您好,我使用的是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?

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

对于MSSQL,它是“选择@@IDENTITY”

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

当您使用
query()
时,您会失去许多automagic cakePHP提供的功能。改用
save()

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


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

我想您只想做:

$this->getLastInsertID();

您可以通过

echo $this->ModelName->getLastInsertID();
或者,您可以使用:

echo $this->ModelName->getInsertID();
这些方法可以在第2775行的cake/libs/model/model.php中找到


注意:如果手动运行insert查询,此函数不起作用

可能有一个特定于蛋糕的函数,但mySQL有
LAST\u insert\u ID()
实际上我正在尝试避免另一个数据库调用。因此,如果使用save,那么我是否能够检索到最后一个insert ID?我希望是。至少我在检索最后一个插入id时从来没有遇到过问题。也看看这里-。@macha是的,是save()方法的使用将自动设置模型的id。一般来说,尝试使用蛋糕内置;它们会自动为您做很多方便的事情(比如设置模型id)。此外,如果您在模型中定义了正确的关联,我如何知道当前模型如何连接到另一个模型,以及另一个模型如何连接到我的目标模型?如果您在模型中定义了正确的关联,则可以通过我上面提到的方式调用这些关联。