Domanda

Ho una query Doctrine_RawSql utilizzando istruzioni preparate. Tuttavia, essi sembrano avere ignorato quando viene generato la query SQL. Ma se lascio i valori simbolici, ottengo un'eccezione sul numero di variabili vincolate che non corrisponde (in modo che sia almeno cercando a loro sub a).

Se includo questi valori in linea, sta Dottrina facendo qualcosa dietro le quinte per evitare SQL injection?

Ecco il mio codice:

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;
}

Questo fornisce il seguente output SQL:

  SELECT *  
  FROM photographers p 
  WHERE p.city_id = ? 
  ORDER BY 
    CASE WHEN p.lname < "?%" THEN 1 ELSE 0 END, p.lname 
  ASC

EDIT: Gli immobili in $location vengono impostati correttamente. Se io hardcode i parametri:

->where('p.city_id = ?', 5)

ho incontrato lo stesso problema con i gettoni non essere sostituiti.

È stato utile?

Soluzione

Non sono del tutto familiarità con Doctrine_RawSql, ma un segnaposto dovrebbe essere di per sé, non è "?%", Proprio? e aggiungere il% sulla variabile si sta passando. Date un'occhiata a esempio # 6 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top