如何防止CakePHP的从上保存数据逃逸?(How can I prevent CakePHP fr

2019-10-18 14:49发布

我做一个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);

问题是蛋糕试图插入'ST_GeomFromText('$geom',4269)'作为一个字符串,我无法弄清楚如何得到它删除它通过编写SQL INSERT语句的报价$this->Location->save();

有什么建议么?

编辑:

之前我在做$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抛出一个错误,并且不会插入几何图形。

Answer 1:

我的问题的解决方案竟然不被基于CakePHP的一个,但PostgreSQL的一个!

通过追加“回归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!



Answer 2:

通过$this->ModelName->getLastInsertID(); 你能得到最后插入的ID。 因此,后救你可以调用这个代码,以获得其ID。



文章来源: How can I prevent CakePHP from escaping data on a save?