Ben hazırlanmış deyimleri kullanarak bir Doctrine_RawSql sorgu var. Ancak, SQL sorgu oluşturulduğunda göz ardı almak gibi görünüyor. Ben belirteç değerleri bırakırsanız Ama ben eşleşmeyen bağlı değişkenlerin sayısı hakkında bir istisna olsun (yani en azından onları alt etmeye çalışıyor).
Ben inline bu değerleri eklerseniz, Doktrin SQL enjeksiyonu önlemek için perde arkasında bir şey yapıyor?
İşte benim kod:
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;
}
Bu aşağıdaki SQL çıkışı sağlar:
SELECT *
FROM photographers p
WHERE p.city_id = ?
ORDER BY
CASE WHEN p.lname < "?%" THEN 1 ELSE 0 END, p.lname
ASC
EDIT: on özellikleri $location
düzgün set edilmektedir. Ben parametreleri hardcode:
->where('p.city_id = ?', 5)
Ben belirteçleri yerini ile değil aynı sorunla karşılaşırsanız.