Field notes · Oct 2026
SQLite said yes. MySQL said 500.
Our tests run on SQLite, production runs MySQL. One quoted column name was all it took.
Our tests run on SQLite in memory. Production runs MySQL. That gap cost nothing until a green build took a page down.
SQLite reads a double-quoted name that isn't a real column as a plain string. So this passes on SQLite and fails on MySQL:
// the real column has a different name $rows = $query->get(['id', 'city']);
The test checked that rows came back, and they did. Every one had a city of "city".
What we kept
Assert on values, not counts, so a wrong column fails even on SQLite. And run risky queries once against a throwaway MySQL database before they ship.