我使用预处理语句获得了Doctrine_RawSql查询。但是,在生成SQL查询时,它们似乎会被忽略。但是如果我省略了令牌值,我会得到一个关于绑定变量数量不匹配的异常(所以它至少试图将它们分入)。
如果我将这些值内联包含在内,那么Doctrine是否会在幕后做任何事情来阻止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)
我遇到了相同的问题,令牌没有被替换。