public function testReplaceQueryParametersWithPostgresCasting() { $extension = new DoctrineExtension(); $query = 'a=? OR (1)::string OR b=?'; $parameters = array(1, 2); $result = $extension->replaceQueryParameters($query, $parameters, false); $this->assertEquals('a=1 OR (1)::string OR b=2', $result); }
/** * Return a query with the parameters replaced * * @param string $query * @param array $parameters * * @return string */ public function replaceQueryParameters($query, $parameters) { $i = 0; $result = preg_replace_callback('/\\?|(:[a-z0-9_]+)/i', function ($matches) use($parameters, &$i) { $key = substr($matches[0], 1); if (!isset($parameters[$i]) && !isset($parameters[$key])) { return $matches[0]; } $value = isset($parameters[$i]) ? $parameters[$i] : $parameters[$key]; $result = DoctrineExtension::escapeFunction($value); $i++; return $result; }, $query); $result = \SqlFormatter::highlight($result); $result = str_replace(array("<pre ", "</pre>"), array("<span ", "</span>"), $result); return $result; }