###質問内容
SQLServerのリンクサーバ機能で(Informixに)接続した環境で、
PHPからSQL文(OPENQUERY等利用)をSQLServerへ発行し、結果の取得を行いたい。
###環境
マシン接続図(同一LAN内でそれぞれ独立したサーバ)
PHP --- SQLServer(リンクサーバ) --- Informix
- PHP 7.0.18 (UTF-8)
- SQLServer2014
- Informix 7.32fc2 (Shift-JIS)
###作業内容
SQLServerのテーブル名 「SqlserverTB」
|id|val|
|:--|:--:|--:|
|1|aaa|
|2|bbb|
Informixのテーブル名 「InformixTB」
|id|val|
|:--|:--:|--:|
|1|ccc|
|2|ddd|
php
1 2print("<<<開始>>>"); 3 4try { 5 $dsn = "dblib:host=192.168.1.10:50000\SQLSERVER2014;dbname=SqlserverTB;charset=UTF-8;"; 6 $db = new PDO($dsn, "user", "password"); 7 $sql1 = "SELECT * FROM SqlserverTB"; 8 $sql2 = "SELECT * FROM OPENQUERY(LINQSRV, 'SELECT * FROM InformixTB')"; 9 10 $stmt = $db->prepare($sql); 11 $stmt->execute(); 12 13 while ($row = $stmt->fetch()) { 14 print("結果:" . $row[1]); 15 } 16 17 print("<<<成功>>>"); 18 19} catch (PDOException $e) { 20 print("PDOException:" . $e->getMessage()); 21} 22 23print("<<<終了>>>"); 24
PHPソースの実行結果
$sql1実行結果 <<<開始>>> 結果:aaa 結果:bbb <<<成功>>> <<<終了>>>
$sql2実行結果 <<<開始>>> <<<成功>>> <<<終了>>>
- $sql1:実行でき結果を取得できた。
- $sql2:実行したが結果を取得できない。Exception等エラーは発生せず。
- $sql2については、SQLServerManegmentStadioで正常に実行できることを確認済み。
- $sql2の実行後、SQLServerManegmentStadioで以下のSQLを実行し、
発行されたSQLを確認したが、結果に対象のSQLが存在しなかった。
SQL
1SELECT * 2FROM sys.dm_exec_query_stats qs 3CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
2017/05/24 14:30 追記
PHPを実行しているサーバで、tsqlコマンドを実行し、
SQLを発行した場合、正しく結果が取得できることを確認
追記したコンフィグ
[root@localhost ~]# vim /etc/freetds.conf
[MSSQL]
host = 192.168.1.10
port = 50000
instance = SQLSERVER2014
charset = UTF8
client charset = UTF8
実行したコマンド
[root@localhost ~]# tsql -S MSSQL -U user -P password
1> SELECT * FROM OPENQUERY(LINQSRV, 'SELECT * FROM InformixTB')
2> go
id val
1 ccc
2 ddd
(2 rows affected)
2017/05/25 15:00 追記
問題を切り分ける為以下を実施
- リンクサーバを新規追加
リンクサーバ名:LOCALSRV
リンクサーバDB:SQLSrver2014
- 実行PHP(SQLを追記)
$sql3 = "SELECT * FROM OPENQUERY(LOCALSRV, 'SELECT * FROM SqlserverTB')";
$sql3実行結果 <<<開始>>> <<<成功>>> <<<終了>>>
実行結果から、
- Informixへの接続が問題ではなさそう。
- OPENQUERYが利用できない、または、使い方が悪いと考えられる。
これから検証する予定の内容
- ビューやストアドを経由し実行結果が取得できないか確認
- PDO以外の接続方法を調査
###補足
前回の質問からの続きです。
PHPからInformixにODBC接続で、表示結果が途中で文字化けする
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。