我有使用准备语句的Doctrine_RawSql查询。 然而,他们似乎是生成的SQL查询时会被忽略。 但是,如果我离开了标记值,我得到不匹配(所以它至少试图子他们)绑定变量的数目异常。
如果我有这些值内联,被教条做幕后的东西,以防止SQL注入?
这里是我的代码:
public function sortedPhotogsByLocation($location)
{
$q = new Doctrine_RawSql();
$result = $q->select('{p.*}')
->from('photographers p')
->addComponent('p', 'Photographer')
->where('p.city_id = ?', $location->id)
->orderBy('CASE WHEN p.lname < "?%" THEN 1 ELSE 0 END, p.lname ASC', $location->photographer_sort)
->execute();
return $result;
}
这提供了以下SQL的输出:
SELECT *
FROM photographers p
WHERE p.city_id = ?
ORDER BY
CASE WHEN p.lname < "?%" THEN 1 ELSE 0 END, p.lname
ASC
编辑:上的属性$location
被设置正确。 如果我硬编码参数:
->where('p.city_id = ?', 5)
我遇到同样的问题,没有被替换的令牌。