tingleiwuyan
tingleiwuyan
### Steps to Reproduce **sequential execution** 1. **Successfully Executed Query**: ```php $query = Tabel::query(); $subQuery = (new Tabel)->getModelsManager()->createBuilder() ->from(Tabel::class)->columns('id') ->andWhere('id IN ({ids:array})')->getPhql(); $query->andWhere("id IN ($subQuery)", ['ids' => [1, 2]]); $data...
reference resources https://github.com/phalcon/cphalcon/issues/16573 , I add 'options' => [ PDO::ATTR_EMULATE_PREPARES => true ] to my database configuration, The result remains unchanged
> 通过对它的修补,我学到了更多。 > > @tingleiwuyan看起来这是出于性能原因而设计的,并且确实只有在您执行具有相同 PHQL 代码的查询时才会触发。这意味着只要 PHQL 保持不变,因此在它里面有相同的 uniqueId,`internalPhqlCache[uniqueId]`它就会重用相同的“已”解析的 SQL 查询字符串。因此,如果绑定的参数发生变化,解析的查询字符串确实会失败。 > > 当绑定参数发生变化但 PHQL 保持不变时,执行此类重复查询时有一个简单的解决方案,即在下`internalPhqlCache`一个查询之前清除,这将强制重新生成所有未来的 PHQL 查询,因此请明智地使用它。在这种情况下,也许您最好进行本机查询。 > > ``` > // first query > Phalcon\Mvc\Model\Query::clean(); > //...