diff --git a/src/Mouf/Database/MagicQuery.php b/src/Mouf/Database/MagicQuery.php index 95061d5..c9158ef 100644 --- a/src/Mouf/Database/MagicQuery.php +++ b/src/Mouf/Database/MagicQuery.php @@ -137,7 +137,7 @@ public function buildPreparedStatement(string $sql, array $parameters = []): str $sql = $this->getTwigEnvironment()->render($sql, $parameters); } - $availableParameterKeys = array_keys(array_filter($parameters, static function($param) { return $param !== null;})); + $availableParameterKeys = array_keys(array_filter($parameters, static function($param) { return $param !== null && $param !== [];})); // We choose md4 because it is fast. $cacheKey = 'request_build_'.hash('md4', get_class($this->platform).'__'.$sql.'__'.implode('_/_', $availableParameterKeys)); $newSql = $this->cache->fetch($cacheKey); diff --git a/tests/Mouf/Database/MagicQueryTest.php b/tests/Mouf/Database/MagicQueryTest.php index f3aa8a7..788df1e 100644 --- a/tests/Mouf/Database/MagicQueryTest.php +++ b/tests/Mouf/Database/MagicQueryTest.php @@ -475,4 +475,12 @@ public function testSetOutputDialect() $this->assertEquals('SELECT id FROM users', self::simplifySql($magicQuery->buildPreparedStatement($sql))); } + + public function testPrepareStatementCache(): void + { + $magicQuery = new MagicQuery(null, new ArrayCache()); + + $this->assertEquals('SELECT * FROM users WHERE 0 <> 0', self::simplifySql($magicQuery->buildPreparedStatement('SELECT * FROM users WHERE id IN :users', ['users' => []]))); + $this->assertEquals('SELECT * FROM users WHERE id IN (:users)', self::simplifySql($magicQuery->buildPreparedStatement('SELECT * FROM users WHERE id IN :users', ['users' => [1]]))); + } }