Oznámení
nesprávná interpretace MSSQL linked server fqdn
před 8 lety
- vobo
- Člen | 2
Dibi 1.3-dev, revize 52e5d43 released on 2010–04–04
PHP Version 5.2.9–2
Dobrý den, narazil jsem na problém s voláním dotazu na linked server, který používá v názvu FQDN. Dibi FQDN jméno serveru roztrhá a ozávorkuje, což mssql neskousne.
SELECT * FROM [dbserver.mojedomena.cz\aplikace].[TEST].[dbo].[VolaneView]
dibi interpteruje jako
SELECT * FROM [dbserver].[mojedomena].[cz\aplikace].[TEST].[dbo].[VolaneView].
Zkoušel jsem si hrát se zdvojením závorek, uvozovek i modifikátorem
%sql, ale nic nezabralo.
Moc děkuji
Vobo
před 8 lety
- Milo
- Nette Core | 1119
Hm, to se asi nebude dát řešit nějak extra dobře. Zkusil bych:
dibi::query('SELECT * FROM %SQL', '[dbserver.mojedomena.cz\aplikace].[TEST].[dbo].[VolaneView]');
před 8 lety
- David Grudl
- Nette Core | 6806
Hmm, s tímto kvůli zpětné kompatibilitě půjde udělat asi jen tohle:
- použít místo query() funkci nativeQuery(), která nic na SQL nemění
- použít konstrukci s
%SQL
- upravit translator tak, aby bral
[dbserver..mojedomena..cz\aplikace]
jako[dbserver.mojedomena.cz\aplikace]
před 8 lety
- Milo
- Nette Core | 1119
Nepomohli by modifikátory %. %[ %]
? Ale nevím, jaké by to
mohlo mít dopady…
před 8 lety
- vobo
- Člen | 2
Pejsek byl nakonec zakopaný (jak jinak) v mssql.
Po troše ladění pomocí dibi::test, který dával
správnou query a dibi::nativeQuery, která stále končila
chybou, jsem zkusil jsem napsat testovací skriptík využívající přímo
mssql.
A ejhle:
*Warning: mssql_query() [function.mssql-query]: message: Heterogeneous queries
require the ANSI_NULLS and ANSI_WARNINGS options to be set for the connection.
This ensures consistent query semantics. Enable these options and then reissue
your query. (severity 16)
*
Tož konečně stopa, takže finální rychlé řešení:
<?php
dibi::query("SET ANSI_NULLS ON");
dibi::query("SET ANSI_WARNINGS ON");
$res=dibi::nativeQuery('SELECT * FROM [dbserver.mojedomena.cz\aplikace].[TEST].[dbo].[VolaneView]');
?>
Díky všem za pomoc.