Doctrina SQL crudo y declaraciones preparadas
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.
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 .