![](/img/trans.png)
[英]how to connect ( pull data ) from one server to ( insert into - create table ) another server using pdo in php-mysql , possibly fetch ?
[英]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.