質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Informix

Informixは、IBM社の関係データベース管理システム。かつては国内シェアをトップのRDBMSでした。高可用性、インスタンスレベルの指定時刻までのリストアなどの特徴を持ちます。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

3923閲覧

PHPからSQLServerのOPENQUERYを実行し結果が返ってこない

M-Kajiwara

総合スコア24

Informix

Informixは、IBM社の関係データベース管理システム。かつては国内シェアをトップのRDBMSでした。高可用性、インスタンスレベルの指定時刻までのリストアなどの特徴を持ちます。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/05/23 13:24

編集2017/05/25 06:26

###質問内容
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接続で、表示結果が途中で文字化けする

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

本問題の解決方法は見出せなかった為、OPENQUERY利用しない方法で回避しました。
以下の「解決方法」項目にサンプルを記載しています。

PHPからInformixにODBC接続で、表示結果が途中で文字化けする

投稿2019/07/05 09:05

M-Kajiwara

総合スコア24

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問