tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

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

Chybka v mssql2005 driveru, fatal error v getResultColumns

před 7 lety

knoxa
Člen | 18

V poslední verzi dibi 2.0 (revize 7c47f57) je v mssql2005 driveru chyba, konkrétně ve funkci getResultColumns, která hodí php fatal Param count and argument count don't match. Problém je ve volání funkce sqlsrv_field_metadata:

<?php
$row = (array) sqlsrv_field_metadata($this->resultSet, $i);
?>

Ta dle PHP dokumentace příjímá jen jeden parametr.

Quickfix:

<?php
    public function getResultColumns()
    {
        $count = sqlsrv_num_fields($this->resultSet);
        $columns = array();
        for ($i = 0; $i < $count; $i++) {
            $row = (array) sqlsrv_field_metadata($this->resultSet);
            $columns[] = array(
                'name' => $row[$i]['Name'],
                'fullname' => $row[$i]['Name'],
                'nativetype' => $row[$i]['Type'],
            );
        }
        return $columns;
    }
?>

před 7 lety

Milo
Nette Core | 1124

Můžeš zkusit, jestli pojede tenhle kód?

public function getResultColumns()
{
    $columns = array();
    foreach ((array) sqlsrv_field_metadata($this->resultSet) AS $fieldMetadata) {
        $columns[] = array(
            'name' => $fieldMetadata['Name'],
            'fullname' => $fieldMetadata['Name'],
            'nativetype' => $fieldMetadata['Type'],
        );
    }
    return $columns;
}

před 7 lety

knoxa
Člen | 18

Yop, jede bez problemů a vrací identický pole.

Editoval knoxa (6. 2. 2012 13:21)

před 7 lety

Milo
Nette Core | 1124

Poslal jsem pull

před 7 lety

regiss
Člen | 61

[Microsoft][SQL Server Native Client 10.0][SQL Server]Line 1: Incorrect syntax near ‚)‘

Problem s fluent interface
fetchAll() OK
fetch() ERROR
fetchSingle() ERROR

Ukazka kodu:

select('No')->from('table')->where('No=%s', 'test')->fetchSingle()

dotaz do SQL server:
"SELECT TOP 1 * FROM ( SELECT [No] FROM [table] WHERE No='test')"

Je to bug v mssql2005 driveru?

Edit:
Moje chyba pouzival jsem mssql2005 na pripojeni k MSSQL serveru 2000
Pokud nekdo potrebuje driver k mssql2000 tak tady hotfix.

Zkopirujte mssql2005 na mssql2000 a prepiste class DibiMsSql2005Driver na class DibiMsSql2000Driver

Dale ve funkci query($sql) doplne na zacatku funkce tyto dva radky
$sql = str_replace("* FROM ( SELECT", "", $sql);
$sql = str_replace(")", "", $sql);

Pote se da pouzivat sqlsrv pro pripojeni k MSSQL2000. Moje konfigurace IIS7 PHP 5.3.9

Editoval regiss (23. 3. 2012 1:47)

před 7 lety

David Grudl
Nette Core | 6822

Lze pomocí sqlsrv_server_info detekovat MSSQL2000? Pak by se dal fix dát přímo do driveru.

před 7 lety

regiss
Člen | 61

Ahoj,
toto vraci funkce sqlsrv_server_info [SQLServerVersion] ⇒ 08.00.2039
a tady je list verzi od MS http://www.tacktech.com/display.cfm?…
A tato verze je na tomto listu jako MS2000, takze se da zjistit server MSQ2000.