nulib-base/php/src/db/pgsql/_pgsqlQuery.php

45 lines
1.1 KiB
PHP

<?php
namespace nulib\db\pgsql;
use nulib\cv;
use nulib\db\_private\_base;
use nulib\db\_private\Tbindings;
use nulib\output\msg;
class _pgsqlQuery extends _base {
use Tbindings;
const DEBUG_QUERIES = false;
/**
* @return resource
*/
function _exec($db) {
$sql = $this->sql;
$bindings = $this->bindings;
if (static::DEBUG_QUERIES) {#XXX
msg::info($sql);
//msg::info(var_export($bindings, true));
}
if ($bindings !== null) {
# trier d'abord les champ par ordre de longueur, pour éviter les overlaps
$names = array_keys($bindings);
usort($names, function ($a, $b) {
return -cv::compare(strlen(strval($a)), strlen(strval($b)));
});
$bparams = [];
$number = 1;
foreach ($names as $name) {
$sql = str_replace(":$name", "\$$number", $sql);
$bparams[] = $bindings[$name];
$number++;
}
$result = pg_query_params($db, $sql, $bparams);
} else {
$result = pg_query($db, $sql);
}
if ($result === false) throw PgsqlException::last_error($db);
return $result;
}
}