tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

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

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:

  1. použít místo query() funkci nativeQuery(), která nic na SQL nemění
  2. použít konstrukci s %SQL
  3. 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.