Propel ORM не может фильтровать по, когда значение поля содержит / или \

Я пытаюсь найти запись на основе значений field1 и field2. это мой запрос

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

Иногда $field2 может иметь странные символы. По какой-то причине всякий раз, когда $field2 содержит \ или /, propel не может получить запись и возвращает пустой результат.

Если я сделаю это (получу ВСЕ записи, основанные только на поле 1, а затем зациклусь на совпадении с полем 2), тогда он будет работать нормально и сможет его получить.

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

Кто-нибудь знает, в чем проблема?


person silow    schedule 10.03.2011    source источник
comment
Как вы даете $field2 его значение? Какую базу данных вы используете? Вероятно, это ошибка экранирования, но я не знаю, кто должен экранировать значение (вероятно, Propel).   -  person Jan Fabry    schedule 10.03.2011
comment
@ Ян Фабри Я использую MySQL. Значение $field2 автоматически генерируется из моего кода (а не пользовательского ввода), и оно всегда сохраняется нормально, без проблем. Не уверен, почему filterByField2 не работает. Я согласен, что забота о побеге должна быть обязанностью Пропеля. Я думал, что Propel позаботится обо всем этом через уровень PDO. По крайней мере, я так думал, и именно поэтому я использую Propel в первую очередь (для уровня PDO) и я вообще не избегаю пользовательского ввода, потому что я полагаюсь на то, что Propel делает это. Вы пробовали и получили похожие результаты?   -  person silow    schedule 10.03.2011


Ответы (1)


Propel по-прежнему должен экранировать OK, даже если в строке есть символы косой черты.

Можете ли вы взять SQL, который он работает (когда вы получите пустой набор результатов), и посмотреть, в чем проблема? Добавьте это к своему вопросу, если это не проливает на вас света.

person halfer    schedule 29.09.2011