Pregunta

Tengo una consulta Doctrine_RawSql usando declaraciones preparadas. Sin embargo, parecen ser ignorado cuando se genera la consulta SQL. Pero si dejo a un lado los valores de los símbolos, consigo una excepción sobre el número de variables ligadas que no coincida con (por lo que es al menos tratar de sub en).

Si incluyo estos valores en línea, está haciendo Doctrina nada en la sombra para evitar la inyección de SQL?

Aquí está mi código:

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

Esto proporciona el siguiente resultado SQL:

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

EDIT: Las propiedades de $location están siendo ajustados. Si codificar los parámetros:

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

I se produce el mismo problema con las fichas no se sustituye.

¿Fue útil?

Solución

No estoy totalmente familiarizado con Doctrine_RawSql, pero un marcador de posición debería ser por sí mismo, no "?%", Justo? y añadir el% en la variable que está de paso. Echar un vistazo a ejemplo # 6 .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top