Frage

Ich habe eine Doctrine_RawSql Abfrage mit Prepared Statements bekommt. Allerdings scheinen sie ignoriert werden, wenn die SQL-Abfrage generiert wird. Aber wenn ich die Tokenwerte auslassen, erhalte ich eine Ausnahme über die Anzahl der gebundenen Variablen nicht passend (so ist es zumindest zu versuchen, sub sie in).

Wenn ich diese Werte inline umfassen, ist Lehre etwas hinter den Kulissen tun SQL-Injection zu verhindern?

Hier ist mein Code:

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

Dies liefert die folgende SQL-Ausgabe:

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

EDIT: Die Eigenschaften auf $location werden richtig eingestellt. Wenn ich hart codieren die Parameter:

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

Ich begegne das gleiche Problem mit den Token nicht ersetzt werden.

War es hilfreich?

Lösung

Ich bin nicht ganz vertraut mit Doctrine_RawSql, sondern ein Platzhalter sollte einfach von selbst, nicht? „%“, Sein? und fügen Sie das% auf der Variable, die Sie übergeben. Schauen Sie sich auf Beispiel # 6 .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top