gpt4 book ai didi

php - 执行 OPENQUERY 以从 MySql Server 中提取数据并使用 PDO 将其从 php 脚本内部连接到 SQL 表?

转载 作者:行者123 更新时间:2023-11-30 23:53:33 25 4
gpt4 key购买 nike

我又一次尝试从 SQL 服务器访问 MySql 服务器的数据时遇到了一个问题。这是我到目前为止所做的。
1) 在我的 SQL Server 上安装 MySQL ODBC Driver 5.2w2) 我从 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) 尝试执行上面列出的相同查询。但是这次我遇到无法解决的错误。

fatal error :未捕获异常“PDOException”,消息为“SQLSTATE[42000]:[Microsoft][SQL Server Native Client 10.0][SQL Server]无法为链接服务器初始化 OLE DB 提供程序“MSDASQL”的数据源对象”服务PHP"

请注意,“SERVPHP”是运行我的 PHP 应用程序和运行 MySql 服务器的服务器。“SERV1”,如果我的 SQL 服务器运行的位置以及我安装 ODBC 驱动程序的位置。

更多,当我从我的 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 服务器执行此查询?

谢谢

最佳答案

根据上面评论中的建议,我发现这是一个权限问题。

我必须转到“链接服务器属性”并单击左侧的“安全”菜单。然后我必须添加一个用户和一个密码。我还选择了“使用登录的当前安全上下文创建”。

关于php - 执行 OPENQUERY 以从 MySql Server 中提取数据并使用 PDO 将其从 php 脚本内部连接到 SQL 表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16289431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com