45 lines
1.1 KiB
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;
|
|
}
|
|
}
|