簡體   English   中英

執行OPENQUERY來從MySql Server提取數據,並使用PDO從php腳本內部將其引導到SQL表?

[英]Executing OPENQUERY to pull data from MySql Server and inner joing it to SQL table from php script using PDO?

我一直面臨着另一個問題,試圖從SQL Server從MySql Server訪問數據。 到目前為止,這是我所做的。
1)在我的SQL Server上安裝了MySQL ODBC Driver 5.2w 2)我按照該網站http://sql-articles.com/blogs/creating-linked--上的說明從Microsoft SQL Server Managment S(MSQLSMS)創建了鏈接服務器服務器到MySQL從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)嘗試執行上面列出的相同查詢。 但是這一次我遇到了無法解決的錯誤。

致命錯誤:消息為'SQLSTATE [42000]的未捕獲異常'PDOException':[Microsoft] [SQL Server本機客戶端10.0] [SQL Server]無法為鏈接服務器“ SERVPHP”初始化OLE DB提供程序“ MSDASQL”的數據源對象

請注意,“ SERVPHP”是運行我的PHP應用程序和運行MySql Server的服務器。 如果我的SQL Server在哪里運行以及在哪里安裝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服務器執行?

謝謝

使用上面評論中的建議,我發現這是一個權限問題。

我必須轉到鏈接服務器屬性,然后單擊左側的“安全性”菜單。 然后,我必須添加一個用戶和密碼。 我還選擇了“使用登錄名的當前安全上下文進行訪問”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM