diff --git a/nur_src/m/pgsql/PgsqlConn.php b/nur_src/m/pgsql/PgsqlConn.php index a993bc2..f84e3b1 100644 --- a/nur_src/m/pgsql/PgsqlConn.php +++ b/nur_src/m/pgsql/PgsqlConn.php @@ -1,6 +1,7 @@ conn, $sql); } else { + # trier d'abord les champ par ordre de longueur, pour éviter les overlaps + $names = array_keys($bindings); + usort($names, function ($a, $b) { + return -SV::compare(strlen(strval($a)), strlen(strval($b))); + }); $bparams = []; $number = 1; - foreach ($bindings as $name => $value) { + foreach ($names as $name) { $sql = str_replace(":$name", "\$$number", $sql); - $bparams[] = $value; + $bparams[] = $bindings[$name]; $number++; } $stmt = pg_query_params($this->conn, $sql, $bparams); diff --git a/src/cl.php b/src/cl.php index 754659c..41a0a1c 100644 --- a/src/cl.php +++ b/src/cl.php @@ -28,6 +28,20 @@ class cl { return $array; } + /** + * construire un tableau avec le résultat de $row[$key] pour chaque élément + * de $rows + */ + static function all_get($key, ?iterable $rows): array { + $array = []; + if ($rows !== null) { + foreach ($rows as $row) { + $array[] = self::get($row, $key); + } + } + return $array; + } + /** * retourner la première valeur de $array ou $default si le tableau est null * ou vide