Připojení Nette\Database k MsSql pomocí ODBC
- iwory
- Člen | 147
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
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
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
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
@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
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
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)
- knedle
- Člen | 34
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
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)
- knedle
- Člen | 34
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:
- špatně napsaný connection string pro pdo:dblib
- 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 :/)