4
我有一個使用預處理語句的Doctrine_RawSql查詢。但是,它們在生成SQL查詢時似乎會被忽略。但是,如果我忽略了令牌值,我會得到一個關於綁定變量數量不匹配的異常(所以它至少試圖將它們分入)。學說原始的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)
我遇到相同的問題,未被替換的標記。
感謝您的建議。我更正了佔位符字符串。但是,原來的問題仍然存在。 – 2009-07-07 17:44:04