Oznámení
Chybka v mssql2005 driveru, fatal error v getResultColumns
před 8 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 8 lety
- Milo
- Nette Core | 1119
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 8 lety
- knoxa
- Člen | 18
Yop, jede bez problemů a vrací identický pole.
Editoval knoxa (6. 2. 2012 13:21)
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 | 6806
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.