|
15 | 15 | use Twig\TwigFilter; |
16 | 16 |
|
17 | 17 | use function addslashes; |
| 18 | +use function array_filter; |
18 | 19 | use function array_key_exists; |
| 20 | +use function array_keys; |
19 | 21 | use function array_merge; |
| 22 | +use function array_values; |
20 | 23 | use function bin2hex; |
21 | 24 | use function class_exists; |
| 25 | +use function count; |
22 | 26 | use function implode; |
23 | 27 | use function is_array; |
24 | 28 | use function is_bool; |
@@ -121,26 +125,26 @@ public function replaceQueryParameters($query, $parameters) |
121 | 125 | $parameters = $parameters->getValue(true); |
122 | 126 | } |
123 | 127 |
|
124 | | - $i = 0; |
125 | | - |
126 | | - if (! array_key_exists(0, $parameters) && array_key_exists(1, $parameters)) { |
127 | | - $i = 1; |
| 128 | + $keys = array_keys($parameters); |
| 129 | + if (count(array_filter($keys, 'is_int')) === count($keys)) { |
| 130 | + $parameters = array_values($parameters); |
128 | 131 | } |
129 | 132 |
|
| 133 | + $i = 0; |
| 134 | + |
130 | 135 | return preg_replace_callback( |
131 | | - '/\?|((?<!:):[a-z0-9_]+)/i', |
| 136 | + '/(?<!\?)\?(?!\?)|(?<!:)(:[a-z0-9_]+)/i', |
132 | 137 | static function ($matches) use ($parameters, &$i) { |
133 | 138 | $key = substr($matches[0], 1); |
134 | 139 |
|
135 | 140 | if (! array_key_exists($i, $parameters) && ! array_key_exists($key, $parameters)) { |
136 | 141 | return $matches[0]; |
137 | 142 | } |
138 | 143 |
|
139 | | - $value = array_key_exists($i, $parameters) ? $parameters[$i] : $parameters[$key]; |
140 | | - $result = DoctrineExtension::escapeFunction($value); |
| 144 | + $value = array_key_exists($i, $parameters) ? $parameters[$i] : $parameters[$key]; |
141 | 145 | $i++; |
142 | 146 |
|
143 | | - return $result; |
| 147 | + return DoctrineExtension::escapeFunction($value); |
144 | 148 | }, |
145 | 149 | $query, |
146 | 150 | ); |
|
0 commit comments