versuchen, die folgende Abfrage in Zend Framework 1 zu schreiben:ZF - MySQL SUM Abfrage mit CASE WHEN
SELECT
SUM(CASE WHEN column2 = 'value1' THEN column3 END) AS 'mySpecialSum',
FROM `my_table`
WHERE column4='value2' AND column5='value3'
zu testen, ich schreibe es so:
$select = $this->select()
->from('my_table', array(
'mySpecialSum'=>'SUM(CASE WHEN column2 = "value1" THEN column3 END)'
))
->where('column4=?', $value2)
->where('column5=?', $value3);
$data = $this->fetchAll($select);
, die funktioniert - aber Ich muss wissen, wie als eine Variable - zB $value1
- vorzugsweise mit Platzhaltern, so dass die Aussage "vorbereitet" - um die Wahrscheinlichkeit der SQL-Injektion zu minimieren.
Derzeit befinden sich zwei Optionen versuchen (die nicht berufstätig sind):
$select = $this->select()
->from('my_table', array(
'mySpecialSum'=>'SUM(CASE WHEN column2 = "{$value1}" THEN column3 END)'
))
->where('column4=?', $value2)
->where('column5=?', $value3);
$data = $this->fetchAll($select);
ODER
$select = $this->select()
->from('my_table', array(
'mySpecialSum'=>'SUM(CASE WHEN column2 = "{$this->_db->quote($value1)}" THEN column3 END)'
))
->where('column4=?', $value2)
->where('column5=?', $value3);
$data = $this->fetchAll($select);