当字段值包含/或\时,Propel ORM无法过滤

Posted

技术标签:

【中文标题】当字段值包含/或\\时,Propel ORM无法过滤【英文标题】:Propel ORM can't filterBy when field value contains / or \当字段值包含/或\时,Propel ORM无法过滤 【发布时间】:2011-03-10 06:28:23 【问题描述】:

我正在尝试根据field1field2 的值查找记录。这是我的查询

$rec = RecQuery::create()->filterByField1($field1)
                         ->filterByField2($field2)
                         ->findOne();

$field2 有时可能有奇怪的字符。由于某种原因,每当 $field2 包含 \/ 时,propel 就无法检索记录并返回空结果。

如果我这样做(仅基于 field1 获取所有记录,然后循环匹配 field2),那么它可以正常工作并且能够检索它

$recs = RecQuery::create()->filterByField1($field1)->find();
foreach ($recs as $rec)
   if($rec->getField2() == $field2)
         //found the record
   

有谁知道问题出在哪里?

【问题讨论】:

你如何赋予$field2它的价值?你用什么数据库?这可能是一个逃逸的错误,但我不知道谁应该逃逸值(可能是 Propel)。 @Jan Fabry 我正在使用 mysql。 $field2 的值是从我的代码中自动生成的(不是用户输入),每次都可以很好地保存,没有问题。不知道为什么 filterByField2 不起作用。我同意 Propel 的工作应该是照顾逃跑。我认为 Propel 通过 PDO 层处理所有这些问题。至少,我是这么想的,这就是为什么我首先使用 Propel(用于 PDO 层)并且我根本不逃避我的用户输入,因为我依赖于 Propel 这样做。您是否尝试过并发现了类似的结果? 【参考方案1】:

即使字符串中有斜线字符,Propel 仍然应该可以转义。

您能否获取它正在运行的 SQL(当您获得空结果集时)并从那里查看问题所在?如果这对您没有任何启发,请将其添加到您的问题中。

【讨论】:

以上是关于当字段值包含/或\时,Propel ORM无法过滤的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能在其他类或函数中使用我的 Propel ORM 类?

Propel ORM - 连接不相关的表

PHP ORM:Doctrine vs. Propel

如何使用 Propel ORM 在数据库中查找重复条目?

真正复杂查询的 ORM 解决方案

Propel (PHP ORM),基本用法为所有(非空)表和列返回 NULL