当字段值包含/或\时,Propel ORM无法过滤
Posted
技术标签:
【中文标题】当字段值包含/或\\时,Propel ORM无法过滤【英文标题】:Propel ORM can't filterBy when field value contains / or \当字段值包含/或\时,Propel ORM无法过滤 【发布时间】:2011-03-10 06:28:23 【问题描述】:我正在尝试根据field1
和field2
的值查找记录。这是我的查询
$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无法过滤的主要内容,如果未能解决你的问题,请参考以下文章