Připojení Nette\Database k MsSql pomocí ODBC

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
iwory
Člen | 147
+
0
-

Zdravím, chtěl bych poprosit o malou radu jak se přiojit k externímu MsSql serveru pomocí nette database.

Defaultně jsem připojen klasika k MySql.

K importu dat z centrální databáze se potřebují připojít k MsSql a přetáhnout data k sobě.
Akorát netuším jak se připojit:
K dispozici mám na serveru doinstalovánu podporu Odbc.

Parametry kalsika IP, Db, Name, Pwd;
Bud se dostanu k chybě could not find driver nebo

SQLSTATE[IM002] SQLDriverConnect: 0 [unixODBC][Driver Manager]Data source name not found, and no default driver specified

Díky moc za nakopnutí

Milo
Nette Core | 1283
+
0
-

Průšvih je v tom, že neexistuje nativní PHP MSSQL rozšíření pro UNIX. Proto se to musí řešit přes unixODBC. unixODBC si musíš také nakonfigurovat tak, aby se připojovalo k MSSQL serveru. A pak možná zjistíš, že si to s novým MSSQL stejně neumí pokecat. A navíc, Nette\Database stejně nebude (teď není) plně funkční s PDO ODBC, pouze základní query.

Pro MSSQL je nejlepší běžet na Windows s nativním sqlsrv.dll, to plně podporuje i Nette\Database.

Ale jestli chceš zabojovat… Zkus si nejprve rozběhat pdo_odbc v nějakém jednoduchém skriptu, zkusit query a pak teprve zkoušet Nette\Database.

Editoval Milo (7. 1. 2014 13:37)

kuty.cz
Člen | 33
+
0
-

Milo napsal(a):

Pro MSSQL je nejlepší běžet na Windows s nativním sqlsrv.dll, to plně podporuje i Nette\Database.

Ano, ale pokud se nepletu, tak až od verze 2.1 podporuje nette\database sqlsrv. Ve starších verzích je jen mssql driver, který je na nic.

Na jakém OS Ti běží ten web? My máme na windows a jedeme přes sqlsrv, ale používáme dibi, protože to má driver mssql2005. V Nette\Database je driver až od verze 2.1.

Editoval kuty.cz (7. 1. 2014 16:21)

iwory
Člen | 147
+
0
-

kuty.cz napsal(a):

Milo napsal(a):

Pro MSSQL je nejlepší běžet na Windows s nativním sqlsrv.dll, to plně podporuje i Nette\Database.

Ano, ale pokud se nepletu, tak až od verze 2.1 podporuje nette\database sqlsrv. Ve starších verzích je jen mssql driver, který je na nic.

Na jakém OS Ti běží ten web? My máme na windows a jedeme přes sqlsrv, ale používáme dibi, protože to má driver mssql2005. V Nette\Database je driver až od verze 2.1.

Web beží na linuxovém stroji. Na daném projektu je nette 2.1
Předpokládám že připojení nebude moc jednoduch, akorát mi jde spíše a „způsob“.
Serverař mi posla info že na stroji je rozšbšhnute odbc a DNS je ‚kpz‘.

Ale jenom se připojit…

Milo
Nette Core | 1283
+
0
-

@kutycz Není to ani web, spíš skripty, které exportují data z MSSQL. Běží to na Win7 a vyvíjel jsem to na Nette-2.1dev takže teď tam je 2.1 stable. S Nette 2.0.x jsem ten driver nikdy nezkoušel.

Editoval Milo (7. 1. 2014 17:01)

Milo
Nette Core | 1283
+
0
-

@iwory Jestli tedy chcete zkoušet Nette\Database s unixODBC, potřebujete na serveru:

  • PDO extension
  • PDO_ODBC extension

Pak si projít komentáře k pdo_odbc driveru.

  • vygooglit/sestavit to správné PDO_ODBC DSN
  • napsat jednoduchý PHP skript s
$pdo = new PDO($dsn, ...);
$res = $pdo->query('SELECT * FROM tabulka');
var_dump($res->fetchAll());
  • zkusit Nette\Database s fungujícím DSN
knedle
Člen | 34
+
0
-

ivory: poprosím o případné sdílení postupu/úspěchu

dnes začínám stejný problém:
nette app na linuxu tahá data ze vzdálené mssql…

aktuálně se to snažím teda nastřelit na lokále, což je wamp na win7… a i tohle mi asi bude taky nějakou dobu trvat (i když to bude krok mimo ohledne vyřešení spojení; udělám si totiž na něm funkčnost, než vyřeším spojení k mssql)

Editoval knedle (8. 1. 2014 9:56)

knedle
Člen | 34
+
0
-

jeden aktuální poznatek:

knihovny pro napojeni mssql pomocí pdo a sqlsrv nefungují s 64 bit. verzemi /např WAMPSERVER (64 BITS & PHP 5.3) 2.2E/, který zrovna mám jako vývoj nainstalován

takže si zkontrolujte (např v phpini Architecture a pokud není x86, máte to blby = nainstalovat 32 verzi)

zkoušel jsem ted nainstalovat druhej wamp (32) vedle toho prvního (64), ale nefunguje, mám jenom tu 32 – možná to nějak půjde, ale aktuálně netuším

edit:
abych nepřišel o db z původní 64 bitové instalace wampu, je nutne 32 přeinstalovat přes 64, sice následne nepůjde spustit ta původní verze PHP (rozdíl 32 vs 64 apache), ale verze DB je možné z menu wampu volit…

edit 2:
bohužel jsem přišel s přeinstalováním na novou verzi PHP (5.4.16) o původní funkční možnost připojení pomocí mssql_connect na té stare 5.3.8 – v ní to bylo možné přes extension php_dblib.dll, kterou jsem vzal bůhvíkde (asi od moodle)
na 5.4 ale nefunguje a to ani když si stahnu novějšší verzi dělanou pro 5.4 ts :/ – jestě se o to budou pokoušet

Editoval knedle (8. 1. 2014 15:49)

iwory
Člen | 147
+
0
-

@Milo Díky, budu zkoušet
@knedle Dostanu se k tomu dnes nebo zítra, tak případný úspěch/neúspěch přihodím

Editoval iwory (8. 1. 2014 12:50)

knedle
Člen | 34
+
0
-

spáchám trochu samomluvy

spojení aktuálně testuji na dvou, respektive třech různých systémech:

  • WIN7 → vzdálené MSSQL
  • Debian 32 → vzdálené MSSQL
  • CentOS 64 → vzdálené MSSQL

Win7 (wamp)

jak už jsem psal dříve jsem úspěšně rozběhl a to:

  • nativně – pomocí mssql_* – pod PHP 5.3 – pomocí php_dblib.dll – které je asi z moodle / bohužel pod 5,4 se mi to už nepodařilo, ačkoli jsou v moodle i novější dll pro php 5,4 i 5,5

    tento způsob ovšem není nativní pro Nette, takže to je jenom takovej test bez užitku

  • PDO: sqlsrv – pomocí knihovny od MicroSoftu – ta ovšem funguje jenom s 32b Apachem…

    nicméně díky tomuto jsem úspěšně připojen v Nette

Debian 32

  • také úspěšně připojen a to díky PDO: dblib i mssql_*
  • pravděpodobně jsme to rozběhli pomocí FreeTDS, ale nejsem si stopro jist, protože jsme se v tom motali půlden, já jen jako přísedící, takže v tom mám hokej
  • jenže Nette nemá dblib jako driver :/ – takže nevím, zda mi to k něčemu je;

    možná půjde „vytvořit“ nový driver za základě některého stávajícího (mssql?) – ale do toho se mi vůbec nechce

  • na tomto debianu jsem chtěl původně rozběhnou odbc driver, ale ten snad je jenom pro 64b systémy…

CentOs 64

  • na tomto se nám zatím nepodařilo rozběhnout vůbec nic – ani ten odbc driver, ani nic jiného

když se teď dívám na drivery Nette, tak jak to je s možnostmi připojení k MSSQL ?

Jak Win tak Unix/Linux by měly být schopny se spojit s MSSQL pomocí těchto tří driverů:

  • mssql (linux do php 5,2; win pomocí php_dblib.dll)
  • odbc (u linux jen 64b systémy)
  • sqlsrv – oboje (?)

je to tak? Nemám v tom úplně jasno…

Milo
Nette Core | 1283
+
0
-

Nette 2.1 má plnohodnotné (plně pokryté testy) drivery pro PostgreSQL, MySQL, SQLite a Microsoft SQL Server 2005+ (sqlsrv). Driverů je více ale většině chybí naimplementovaná reflexe, takže největší sílu Nette\Database nelze využít. Pro základní Database\Context::query(), tedy ručně volané SELECT/INSERT/UPDATE/DELETE, by mohli stačit.

  • sqlsrv je nástupce mssql rozšízení, vyvíjího přímo Microsoft a existuje jen jako DLL, pro Linux není

Jinak co píšeš celkem sedí.

Pokud bys/byste chtěli nějaký další driver doimplementovat, prohlédněte testy v adresáři tests/Nette/Database. Mělo by z nich být vidět, jak testy rozšířit. Pak je spustíte a uvidíte, kde chybují a podle toho dodělat driver/fixnout Nette.

Editoval Milo (13. 1. 2014 23:12)

hrach
Člen | 1844
+
0
-

viz. taky tabulka podpory v en dokumentaci: https://doc.nette.org/en/database

knedle
Člen | 34
+
0
-

další kus samomluvy

bohužel stále řeším funkční připojení – ten hlavní server, na kterém to potřebuji rozběhnout, je totiž ten CentOs (5.x)

u něj se nám podařilo po několik hodinách instalování a upgradování rozběhnout PDO dblib – jo, s nette to furt nic neřeší, ale pro mne je to alespon jedna možnost…
(a už jsem se smířil s tím, že to prostě nějak přes dblib udělám – třeba vlastní db třídou…)

jenže když zavolám testovací skript, vyhodí mi to hlášku:

SQLSTATE[01002] Adaptive Server connection failed (severity 9)

tahle hláška (dle googlu) má možné 2 příčiny:

  1. špatně napsaný connection string pro pdo:dblib
  2. blbej login/heslo

jenže ani jeden z těchto důvodů to být nemůže, protože identický skript používám pro test i na (výše zmíněném) Debianu i lokálním vývojové Win7 (ošetřen separator dle systemu) – a na těch je připojení funkční

krom toho se úspěšně připojíme na vzdálený server přes consoli pomocí tsql = takže vlastní FreeTDS je OK

Pokud čirou náhodou někdo tušíte, kde by mohl být problém, prosím o radu.

(odbc se mi/nám na CentOs-u rozjet nepodařilo :/)