tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

Omlouváme se, provoz fóra byl ukončen

Problem s fetch v MSSQL při přihlášení pře PDO

před 8 lety

zahry
Člen | 8

Po instalaci SqlSrv od Microsoftu se při přihlášení přes PDO

dibi::connect(array(
‚driver‘ ⇒ ‚pdo‘,
‚pdo‘ ⇒ new PDO(‚sqlsrv:server=‘ . $server . ‚;database=‘ . $database . ‚;‘, $name, $password)
));

se při dotazu

$session = dibi::select(‚*‘)
->from(‚table‘)
->where('')
->fetch();

se objevuje následující chyba

PDO or driver does not support applying limit or offset.

před 8 lety

gavec
Člen | 68

Ahoj, taky jsem došel k tomuto problému. Vyřešil si to nějak prosím? Nebo ví někdo, jak fetch a fetchsingle zprovoznit při napojení přes PDO?

před 8 lety

mr.mac
Člen | 87

Používám v Dibi vlastní driver sqlsrv.php, který jsem si jednoduše upravil ze stávajícího mssql.php, abych mohl v PHP 5.3 pracovat s MS SQL (2008 R2). Funkce fetch(), fetchSingle() a fetchAll() mi fungují v pohodě. Připojení však nepoužívám PDO.
Co se týče limit a offset, tak stejně jako autor mssql.php offset zatím implementován nemám, obcházím to takovou malou hrůzou v modelu – zbývá asi málo to dotáhnout do driveru:

public function pg_data($sql_cmd, $cond, $key='', $limit=0, $offset=0)
{
    if($limit==0 && $offset==0){
        $rslt = $this->connection->query("$sql_cmd WHERE $cond");
    } else {
        //implementace stránkování
        $page = (int) ($offset / $limit) + 1;
        $start = ($page - 1) * $limit + 1;
        $end = $page * $limit;
        $rw = "SELECT ROW_NUMBER() OVER(ORDER BY $key) AS RowNum, ";
        $sql_cmd = str_replace("SELECT ", $rw, $sql_cmd);
        $sql_cmd = "$sql_cmd WHERE $cond";
        $rslt = $this->connection->select("*")->from("($sql_cmd) tmp
                            WHERE tmp.RowNum BETWEEN $start AND $end");

    }
    return $rslt;
}

Editoval mr.mac (28. 11. 2011 21:53)

před 8 lety

David Grudl
Nette Core | 6806

Tento problém by v poslední verzi být neměl.