如何防止CakePHP在保存时转义数据?

时间:2013-09-10 15:38:33

标签: php postgresql cakephp postgis

我正在对CakePHP应用程序进行一些PostGIS工作。

因为我一直在使用一些数据库函数,所以我已经完成了原始$this->query()调用来插入数据。我正处于需要获取插入查询结果ID的位置,但$this->query()返回一个空数组。

以下是我用于插入的查询:

INSERT INTO locations (title,company_id,state_id,poly,point) 
VALUES ('$title',$company_id,$state_id,ST_GeomFromText('$geom',4269),$point);

问题是Cake正在尝试将'ST_GeomFromText('$geom',4269)'作为字符串插入,我无法弄清楚如何通过$this->Location->save();删除它在准备的SQL插入语句中的引号。

有什么建议吗?

修改

在我做$this->query();之前,我的SQL工作正常。这不是问题。

现在我做的时候:

$this->Location->create();
$this->Location->set('poly',$poly);

... Set all the rest of the model fields ...

$this->Location->save();

生成的SQL如下所示:

INSERT INTO locations (title,company_id,state_id,poly,point) 
VALUES ('Some Title',5,23,'ST_GeomFromText('$geom',4269)',POINT(-72.342,102.23455);

因为ST_GeomFromText被'引用',所以PostgreSQL会抛出错误并且不会插入几何体。

2 个答案:

答案 0 :(得分:1)

问题的解决方案原来不是基于CakePHP的,而是PostgreSQL的解决方案!

通过将“RETURNING id”附加到查询中,如下所示:

INSERT INTO locations (title,company_id,state_id,poly,point) 
VALUES ('$title',$company_id,$state_id,ST_GeomFromText('$geom',4269),$point) RETURNING id;

查询不再返回空数组,现在返回刚刚创建的行的ID!

答案 1 :(得分:0)

通过$this->ModelName->getLastInsertID();,您可以获得最后插入的ID。因此,在保存之后,您可以调用此代码来获取其ID。