Doktrin ham sql ve hazırlanmış tablolar

1 Cevap php

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.

1 Cevap

Sadece, ben Doctrine_RawSql tamamen aşina değilim, ama bir tutucu, kendi kendine? "%" Olmamalıdır? ve geçiyoruz değişken üzerinde% ekleyin. example #6 bir göz atın.