I really can't spot my mistake in here.
$query = <<<'BUM'
(
SELECT ca.id, ca.name, ca.slug, ca.record_date, 2 AS complete, 0 AS numbers
FROM `cms_articles_article` ca
WHERE record_date
BETWEEN ':y_1 - :m_1 -01'
AND ':y_2 - :m_2 -31'
GROUP BY ca.id
LIMIT 0, 3)
UNION ALL (
SELECT ca.id, ca.name, ca.slug, ca.record_date, 1 AS complete, COUNT( ca.id ) AS numbers
FROM `cms_articles_article` ca
WHERE YEAR( record_date ) = :y_3
GROUP BY MONTH( record_date )
)
UNION ALL (
SELECT ca.id, ca.name, ca.slug, ca.record_date, 0 AS complete, COUNT( ca.id ) AS numbers
FROM `cms_articles_article` ca
GROUP BY YEAR( record_date )
)
ORDER BY
complete ASC,
record_date DESC
BUM;
$stmt = $db
->prepare($query)
;
$year = 2013;
$month = 12;
$stmt->execute(array(
':y_1' => $year,
':y_2' => $year,
':y_3' => $year,
':m_1' => $month,
':m_2' => $month,
));
I took into account the fact you can't reuse named parameter. If you remove the :y_3 from query (and execution), it will run correctly. Any help is appreciated.