SQL サーバーから MySql サーバーのデータにアクセスしようとすると、問題に直面しています。これが私がこれまでに行ったことです。
1) SQL Server に MySQL ODBC Driver 5.2w をインストールしました 2) このサイトの指示に従って、Microsoft SQL Server Managment S (MSQLSMS) からリンク サーバーを作成しました
http://sql-articles.com/blogs/creating-linked- server-to-mysql-from-sql-server/
MSQLSMS で「SERV1」というサーバーへの接続を開き、次のクエリを実行しましたが、問題なく動作しています。
SELECT
p.team_name,
p.fullname,
SUM( ISNULL(i.CallDurationSeconds, 0) ) AS totalTime
FROM OPENQUERY(SERVPHP, 'SELECT
CAST(t.name AS CHAR) AS team_name,
CAST(TRIM(REPLACE(CONCAT(su.first_name, " ", su.middle_name , " ", su.last_name), " ", " ")) AS CHAR) AS fullname,
CAST(su.login_user AS CHAR) AS username,
CAST(p.account_id AS UNSIGNED) AS account_id
FROM call_managment_system.phone_calls AS p
INNER JOIN call_managment_system.users AS su ON p.owner_id = su.user_id
INNER JOIN call_managment_system.teams AS t ON su.team_id = t.team_id
WHERE p.status = 2 AND t.client_id = 1 AND p.last_attempt_on BETWEEN "2013-01-01 08:00:00" AND "2013-04-30 07:00:00"
GROUP BY t.team_id, p.owner_id') AS p
INNER
JOIN OPENQUERY(SERVPHP, 'SELECT
CAST(cn.contact_number AS CHAR) AS phone_number,
CAST(cn.account_id AS UNSIGNED) AS account_id
FROM call_managment_system.contact_numbers AS cn
WHERE cn.contact_link = "Account"
UNION
SELECT CAST(cn2.contact_number AS CHAR) AS phone_number,
CAST(cn2.account_id AS UNSIGNED) AS account_id
FROM call_managment_system.contact_personal AS cp
INNER JOIN call_managment_system.contact_numbers AS cn2 ON cn2.person_id = cp.person_id AND cn2.contact_link = "Account" ') AS cn ON cn.account_id = p.account_id
INNER
JOIN I3_IC.dbo.CallDetail AS i ON p.username = i.LocalUserId AND RIGHT(i.RemoteNumber, 10) = cn.phone_number
WHERE i.I3TimeStampGMT BETWEEN '2013-01-01 08:00:00' AND '2013-04-30 07:00:00'
GROUP BY p.team_name, p.fullname
今、私はPHPを使用してこのクエリを実行しています。私は次のことを行いました1)PDO APIを使用して、以前にこのクエリを実行したSQLサーバー「SERV1」に接続します。2) 上記と同じクエリを実行してみてください。しかし、今回は解決できないエラーが発生します。
致命的なエラー: キャッチされない例外 'PDOException' とメッセージ 'SQLSTATE[42000]: [Microsoft][SQL Server Native Client 10.0][SQL Server] リンク サーバー "SERVPHP" の OLE DB プロバイダー "MSDASQL" のデータ ソース オブジェクトを初期化できません
「SERVPHP」は、PHP アプリケーションが実行され、MySql サーバーが実行されているサーバーであることに注意してください。SQL サーバーが実行されていて、ODBC ドライバーをインストールした場所の場合は「SERV1」。
さらに、このクエリを PHP アプリケーションから同じ方法で実行すると、動作します
SELECT
LocalUserId AS loginName,
RemoteNumber AS PhoneNumber,
SUM(CallDurationSeconds) AS totalTalk
FROM CallDetail
WHERE LocalUserId = 'test' AND
I3TimeStampGMT BETWEEN '2013-01-01 08:00:00' AND '2013-04-30 07:00:00'
GROUP BY LocalUserId, RemoteNumber
なぜ今それが機能しているのですか?このクエリを PHP サーバーから実行するには何が必要ですか?
ありがとう